Я пытаюсь просто избавиться от повторяющихся последовательных слов из текстового файла, и кто-то упомянул, что я могу сделать что-то вроде этого:
Pattern p = Pattern.compile("(\\w+) \\1");
StringBuilder sb = new StringBuilder(1000);
int i = 0;
for (String s : lineOfWords) { // line of words is a List<String> that has each line read in from txt file
Matcher m = p.matcher(s.toUpperCase());
// and then do something like
while (m.find()) {
// do something here
}
Я попытался посмотреть на m.end, чтобы посмотреть, смогу ли я создать новую строку или удалить элементы, где есть совпадения, но я не был уверен, как это работает после прочтения документации. Например, в качестве тестового примера, чтобы увидеть, как это работает, я сделал:
if (m.find()) {
System.out.println(s.substring(i, m.end()));
}
К текстовому файлу, который имеет: This is an example example test test test.
Почему мой вывод This is
?
Edit:
если у меня есть AOriList lineOfWords, который читает каждую строку из строки файла .txt, а затем я создаю новый ArrayList для хранения измененной строки. Например
List<String> newString = new ArrayList<String>();
for (String s : lineOfWords {
s = s.replaceAll( code from Kobi here);
newString.add(s);
}
но тогда это не дает мне новые s, а оригинальные s. Это из-за мелкого или глубокого копирования?