Удаление пунктуации не работает в Java с заменой строки

1

Итак, я пытаюсь сделать компиляцию одного списка слов без повторов из 8 отдельных словарных списков словарей. В некоторых словарях есть знаки препинания, чтобы отделить слова. Ниже я имею то, что относится к удалению пунктуации. Я пробовал несколько различных решений, которые я обнаружил при переполнении стека относительно выражений регулярных выражений, а также тот, который я оставил на месте в своем коде. По какой-то причине ни один из них не удаляет пунктуацию из исходных словарей. Может кто-нибудь сказать мне, что это я сделал неправильно здесь и, возможно, как это исправить? Я в недоумении, и коллега проверяет это, и он говорит, что это тоже должно работать.

int i = 1;
boolean checker = true;
Scanner inputWords;
PrintWriter writer = new PrintWriter(
        "/home/htarbox/Desktop/fullDictionary.txt");
String comparison, punctReplacer;

ArrayList<String> compilation = new ArrayList<String>();



while (i <9)
{
inputWords = new Scanner(new File("/home/htarbox/Desktop/"+i+".txt"));
    while(inputWords.hasNext())
    {
        punctReplacer = inputWords.next();
        punctReplacer.replaceAll("[;.:\"()!?\\t\\n]", "");
        punctReplacer.replaceAll(",", "");
        punctReplacer.replaceAll("\u201C", "");
        punctReplacer.replaceAll("\u201D", "");
        punctReplacer.replaceAll("", "'");

        System.out.println(punctReplacer);
        compilation.add(punctReplacer);
    }
    }
inputWords.close();
}
i = 0;
  • 3
    Строки неизменны. Прочитайте Javadoc методов, которые вы используете.
  • 0
    Я знаю, что строки являются неизменяемыми, однако функция замены из моего понимания должна воссоздать всю строку.
Показать ещё 3 комментария
Теги:
string
arraylist
replaceall

2 ответа

5
Лучший ответ

Линия

punctReplacer.replaceAll(",", "");

возвращает новую String с вашей заменой (которую вы игнорируете). Он не изменяет существующую String. Как таковой вам нужно:

punctReplacer = punctReplacer.replaceAll(",", "");

Strings неизменяемы. После создания вы не можете их изменить, и любой метод манипуляции с String вернет вам новую String

  • 0
    Попался. Мое недоразумение заключалось в том, что я думал, что метод работает аналогично математическому + =, и автоматически заменял эту строку новой строкой, а не мне приходилось назначать ее. Огромное спасибо!
4

Поскольку строки неизменяемы, вы должны сбросить свою переменную:

punctReplacer = punctReplacer.replaceAll("[;.:\"()!?\\t\\n]", "");

(btw, immutable означает, что вы не можете изменить значение после его установки, поэтому с String вам всегда нужно сбросить переменную, если вы хотите ее изменить)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню