Как обрезать подстроки после небуквенного токена в 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(" "));
Другие вопросы по тегам