Подтвердить что ты не робот

Как удалить пунктуацию из текста ввода в 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;

Я не могу найти способ удалить все небуквенные символы. Я пробовал использовать регулярные выражения и итераторы без везения. Спасибо за любую помощь.

4b9b3361

Ответ 1

Это сначала удаляет все небуквенные символы, складывает их в нижний регистр, а затем разбивает входные данные, выполняя всю работу в одной строке:

String[] words = instring.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");

Пространства сначала остаются на входе, поэтому раскол будет работать.

Удаляя символы мусора перед расщеплением, вы избегаете прокрутки элементов.

Ответ 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;
}

Примечание. Это будет включать в себя как буквы, так и цифры