Как удалить пунктуацию из текста ввода в Java?
Я пытаюсь получить предложение с использованием ввода от пользователя в Java, и мне нужно сделать его строчным и удалить все знаки препинания. Вот мой код:
String[] words = instring.split("\\s+");
for (int i = 0; i < words.length; i++) {
words[i] = words[i].toLowerCase();
}
String[] wordsout = new String[50];
Arrays.fill(wordsout,"");
int e = 0;
for (int i = 0; i < words.length; i++) {
if (words[i] != "") {
wordsout[e] = words[e];
wordsout[e] = wordsout[e].replaceAll(" ", "");
e++;
}
}
return wordsout;
Я не могу найти способ удалить все небуквенные символы. Я пробовал использовать регулярные выражения и итераторы без везения. Спасибо за любую помощь.
Ответы
Ответ 1
Это сначала удаляет все небуквенные символы, складывает их в нижний регистр, а затем разбивает входные данные, выполняя всю работу в одной строке:
String[] words = instring.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");
Пространства сначала остаются на входе, поэтому раскол будет работать.
Удаляя символы мусора перед расщеплением, вы избегаете прокрутки элементов.
Ответ 2
Вы можете использовать следующую конструкцию регулярного выражения
Пунктуация: Одна из! "# $% & '() * +, -./:; <=>? @[] ^ _' {|} ~
inputString.replaceAll("\\p{Punct}", "");
Ответ 3
Вы можете попробовать следующее: -
Scanner scan = new Scanner(System.in);
System.out.println("Type a sentence and press enter.");
String input = scan.nextLine();
String strippedInput = input.replaceAll("\\W", "");
System.out.println("Your string: " + strippedInput);
[^\w]
соответствует символу без слова, поэтому приведенное выше регулярное выражение будет соответствовать и удалять все символы, отличные от слова.
Ответ 4
Если вы не хотите использовать RegEx (что кажется крайне ненужным с учетом вашей проблемы), возможно, вам стоит попробовать что-то вроде этого:
public String modified(final String input){
final StringBuilder builder = new StringBuilder();
for(final char c : input.toCharArray())
if(Character.isLetterOrDigit(c))
builder.append(Character.isLowerCase(c) ? c : Character.toLowerCase(c));
return builder.toString();
}
Он проходит через базовый char[]
в String
и добавляет только char
, если это буква или цифра (отфильтровать все символы, которые я принимаю, это то, что вы пытаетесь выполнить), а затем добавляет строчную версию char
.
Ответ 5
Мне не нравится использовать регулярное выражение, так что вот еще одно простое решение.
public String removePunctuations(String s) {
String res = "";
for (Character c : s.toCharArray()) {
if(Character.isLetterOrDigit(c))
res += c;
}
return res;
}
Примечание. Это будет включать в себя как буквы, так и цифры