Вывести слова в обратном порядке, оставив на месте символы и числа
Логику вроде понял, но при компиляции устойчиво выводит то же значение, которое задается. Подозреваю, что не то значение возвращаю, но возможно ошибаюсь. Вот что набросал:
Main класс:
public class AnagramApplication {
public static void main(String[] args) {
String reverse = "a1bcd efg!h";
Anagram anagram = new Anagram();
String reversedText = anagram.SortingMethod(reverse);
System.out.println(reversedText);
}
}
Основной алгоритм:
import java.util.Arrays;
import java.util.stream.Collectors;
public class Anagram {
public String reverseThis(String text) {
String[] letters = text.split(" ");
return Arrays.stream(letters).map(this::SortingMethod).collect(Collectors.joining(" "));
}
public String SortingMethod(String letter) {
char[] lettersArray = letter.toCharArray();
int startBorder = 0;
int endBorder = lettersArray.length - 1;
while (startBorder < endBorder) {
if (Character.isAlphabetic(lettersArray[startBorder]) &&
Character.isAlphabetic(lettersArray[endBorder])) {
char temp = lettersArray[startBorder];
temp = lettersArray[endBorder];
lettersArray[endBorder] = temp;
startBorder++;
endBorder--;
} else if (Character.isAlphabetic(lettersArray[startBorder]) && !Character.isAlphabetic(lettersArray[endBorder])) {
endBorder--;
} else if (!Character.isAlphabetic(lettersArray[startBorder]) && Character.isAlphabetic(lettersArray[endBorder])) {
startBorder++;
} else {
startBorder++;
endBorder--;
}
}
return String.valueOf(lettersArray);
}
}
Ответы (2 шт):
Автор решения: AVRamones
→ Ссылка
Ну как-то так можно попробовать (костыльно):
public static void main(String[] args) {
String reverse = "a1bcd efg!h";
String[] words = reverse.split(" ");
StringBuilder builder = new StringBuilder();
for (String str : words){
builder.append(reverseString(str)).append(" ");
}
System.out.println(builder.toString().trim());
}
public String reverseString(String str){
HashMap<Integer, Character> map = new HashMap<>();
StringBuilder result = new StringBuilder();
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++){
if (!Character.isLetter(chars[i])){
map.put(i,chars[i]);
}
else
result.append(chars[i]);
}
result.reverse();
for (Map.Entry<Integer, Character> entry : map.entrySet()) {
result.insert(entry.getKey(), entry.getValue().toString());
}
return result.toString();
}
Автор решения: Alexandr
→ Ссылка
Попробуйте так:
public String SortingMethod(String letter) {
char[] lettersArray =
letter.toCharArray();
int startBorder = 0;
int endBorder = lettersArray.length - 1;
while (startBorder < endBorder) {
if (!Character.isAlphabetic(lettersArray[startBorder]))
startBorder++;
else if (!Character.isAlphabetic(lettersArray[endBorder]))
endBorder--;
else {
char temp = lettersArray[startBorder];
lettersArray[startBorder] = lettersArray[endBorder];
lettersArray[endBorder] = temp;
startBorder++;
endBorder--;
}
}
return String.valueOf(lettersArray);
}