Ваша проблема заключается в неправильном обращении с OS-зависимым разделителем строк, здесь
String[] words = wordListContents.split("\n");
оставляя дополнительные символы в строках вашего словаря.Не все ОС используют «\ n» для разделения строк, поэтому вы должны написать код, чтобы принять это во внимание.
Один из вариантов - позволить Java сказать вам, какой разделитель строк использовать, а затем использовать его:
String lineSeparator = System.getProperty("line.separator");
String[] words = wordListContents.split(lineSeparator);
Хотя проще всего использовать файлы для получения всех строк, что-то вроде:
private List<String> wordsSet1;
private ArrayList<String> wordsSet2;
public TestDictionary(String path) throws IOException {
// my code:
wordsSet1 = Files.readAllLines(Paths.get(path));
Используя файлы readAllLines, вы разрешите Java выбрать правильный разделитель строк.
сравните ваш код с моим:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import save.MyColorFoo;
public class TestDictionary {
// public static final String TXT_PATH = "src/pkg1/words.txt";
// TODO: change this to your correct path
public static final String TXT_PATH = "words.txt";
private List<String> wordsSet1;
private ArrayList<String> wordsSet2;
public TestDictionary(String path) throws IOException {
// my code:
wordsSet1 = Files.readAllLines(Paths.get(path));
// his code
String wordListContents = new String(Files.readAllBytes(Paths.get(path)));
wordsSet2 = new ArrayList<>();
String[] words = wordListContents.split("\n");
for (int i = 0; i < words.length; i++) {
wordsSet2.add(words[i].toLowerCase());
}
}
public boolean myContains(String word) {
return wordsSet1.contains(word.toLowerCase());
}
public boolean hisContains(String word) {
return wordsSet2.contains(word.toLowerCase());
}
public static void main(String[] args) {
try {
TestDictionary testDictionary = new TestDictionary(TXT_PATH);
String testWord = "zinky";
System.out.println("My List contains \"zinky\": " + testDictionary.myContains(testWord));
System.out.println("His List contains \"zinky\": " + testDictionary.hisContains(testWord));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Если выЕсли вы не уверены, что в исходном текстовом файле есть все строчные буквы, а затем нужно их уменьшить, то вы можете использовать Streams, чтобы помочь вам сделать это:
wordsSet1 = Files.readAllLines(Paths.get(path))
.stream().map(s -> s.toLowerCase())
.collect(Collectors.toList());