Как обрезать подстроки после небуквенного токена в Java
У меня есть строка. В моем коде я пытаюсь обрезать подстроки после не-буквенного токена, если они есть. Как вы думаете, что будет лучшим способом сделать это?
Я пытался разделить, заменить все функции и сопоставить функции с регулярным выражением, но не смог найти хорошее решение.
String initialString = "Brown 1fox jum'ps over 9 the_t la8zy dog.";
String[] splitString = initialString.split(" ");
String finalString= new String();
for (int i = 0; i < splitString.length; i++) {
finalString+=splitString[i].split("[^a-zA-Z]",2)[0]+" ";
}
finalString=finalString.trim().replaceAll("\\s+", " ");
Фактический результат (как и ожидалось): "Коричневый гум на собаку"
2 ответа
Решение
В качестве альтернативы вы можете использовать [^a-zA-Z ]+\S*
заменить совпадения пустой строкой и после этого заменить двойные пробельные символы одним \\s{2,}
String string = "Brown 1fox jum'ps over 9 the_t la8zy dog.";
String result = string.replaceAll("[^a-zA-Z ]+\\S*", "").replaceAll("\\s{2,}", " ");
Все, что вам нужно сделать, это,
String initialString = "Brown 1fox jum'ps over 9 the_t la8zy dog.";
String resultStr = Stream.of(initialString.split(" "))
.map(s -> s.replaceAll("[^A-Za-z].*", ""))
.filter(s -> !s.isEmpty())
.collect(Collectors.joining(" "));