Как сделать чтобы небуквенные символы в слове оставались на своих местах, а буквы были реверсированные в Java?
Нужно реверсировать слова, чтобы небуквенные символы остались на своих местах.
Вот пример кода с реверсом слова:
public class Reverse {
public static void main(String[] args) {
System.out.println(reverse("Hello World!"));
}
public static String reverse(String input) {
String inputWords[] = input.split(" ");
String outputWords[] = new String[inputWords.length];
int i = 0;
for (String inputWord : inputWords) {
String reverse = new StringBuilder(inputWord).reverse().toString();
outputWords[i] = reverse;
i++;
}
return String.join(" ", outputWords);
}
}
Как изменить код чтобы символы оставались на своих местах?
Ответы (1 шт):
Автор решения: Alexey R.
→ Ссылка
Можно так:
class Reverse {
public static void main(String[] args) {
System.out.println(reverse("Hel!lo, Wo~~rld!"));
}
public static String reverse(String input) {
Pattern p = Pattern.compile("([a-zA-Z]+)([^a-zA-Z]*)");
Matcher m = p.matcher(input);
StringBuilder result = new StringBuilder();
while(m.find()){
String word = m.group(1);
String nonWord = m.group(2);
if(word != null){
result.append(new StrBuilder(word).reverse().toString());
}
if(nonWord != null){
result.append(nonWord);
}
}
return result.toString();
}
}
Вывод:
leH!ol, oW~~dlr!