Итак, я пытаюсь сделать компиляцию одного списка слов без повторов из 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;
Линия
punctReplacer.replaceAll(",", "");
возвращает новую String
с вашей заменой (которую вы игнорируете). Он не изменяет существующую String
. Как таковой вам нужно:
punctReplacer = punctReplacer.replaceAll(",", "");
Strings
неизменяемы. После создания вы не можете их изменить, и любой метод манипуляции с String
вернет вам новую String
Поскольку строки неизменяемы, вы должны сбросить свою переменную:
punctReplacer = punctReplacer.replaceAll("[;.:\"()!?\\t\\n]", "");
(btw, immutable означает, что вы не можете изменить значение после его установки, поэтому с String вам всегда нужно сбросить переменную, если вы хотите ее изменить)