Нужно разворачивать каждое слово отдельно. Для строки из условия результат — emaN si eht tseb TI !ynapmoc; разворот всей строки меняет также порядок слов и не подходит.
Обратный порядок символов в каждом слове при сохранении последовательности слов
Нужно разворачивать каждое слово отдельно. Для строки из условия результат — emaN si eht tseb TI !ynapmoc; разворот всей строки меняет также порядок слов и не подходит.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дана строка input. Необходимо изменить порядок символов внутри каждого отдельного слова, при этом порядок самих слов в предложении должен остаться неизменным. Как выполнить эту задачу?
import java.io.*;
class MyCode {
public static void main(String[] args) {
String input = "Name is the best IT company!";
System.out.println(reverseWordChars(input));
System.out.println("!/ynapmoc TI tseb eht si emaN".equals(reverseWordChars(input)));
}
public static String reverseWordChars(String str) {
return new StringBuilder(str).reverse().toString();
}
}
Ответ
Нужно разворачивать каждое слово отдельно. Для строки из условия результат — emaN si eht tseb TI !ynapmoc; разворот всей строки меняет также порядок слов и не подходит.
Вариант Java с сохранением пробельных разделителей:
static String reverseWordChars(String str) {
var matcher = java.util.regex.Pattern.compile("\\S+").matcher(str);
var result = new StringBuffer();
while (matcher.find()) {
String word = new StringBuilder(matcher.group()).reverse().toString();
matcher.appendReplacement(result,
java.util.regex.Matcher.quoteReplacement(word));
}
matcher.appendTail(result);
return result.toString();
}
Пунктуация считается частью слова и тоже разворачивается. Проверка в исходнике содержит неподходящее ожидаемое значение. Для сложных Unicode-графем нужна отдельно согласованная обработка, а не простой разворот символов.