字符串列表 - 奇怪的行为
List of Strings - Odd Behavior
我正在为随机词生成器开发一个淫秽过滤器,以便它避免某些词或短语。到目前为止代码相当简单,我正在使用一些测试词来尝试它,但是已经出现了一个对我来说完全没有意义的奇怪错误。
final List<String> obscene;
WordEngine(){
obscene = new ArrayList<>();
loadObscene();
System.out.println(isObscene("otestingo"));
}
void loadObscene(){
try {
InputStream configStream = Interactions.class.getResourceAsStream("obscene.txt");
Scanner fileScanner = new Scanner(configStream);
fileScanner.useDelimiter("\n");
String nextWord;
while(fileScanner.hasNext()){
nextWord = fileScanner.next();
obscene.add(nextWord);
}
}catch(Exception e){
System.out.println(e);
}
//for(String obsceneIterator : obscene){ System.out.println(obsceneIterator); }
}
boolean isObscene(String word){
for (Iterator<String> it = obscene.iterator(); it.hasNext();) {
String nextObscene = it.next();
String test = nextObscene;
System.out.println(test);
System.out.println(test + " " + word);
if(word.contains(nextObscene)){
return true;
}
}
return false;
}
文本文件包含:
words
for
testing
输出为:
words
otestingo
for
otestingo
testing
otestingo
false
预期输出为:
words
words otestingo
for
for otestingo
testing
testing otestingo
true
有关连接字符串或访问它的问题导致它被删除。我已经尝试了所有我能想到的探索,但没有找到任何方法来理解我期望的和我得到的之间的差异。
在您的文本文件中使用 UNIX 行结尾 (\n
) 时,您的程序会产生您期望的输出。但是,如果您使用 dos 行结尾,您(几乎)会得到您描述的输出。我看到的真实输出是:
words
otestingo
for
otestingo
testing
otestingo
false
您可能没有使用 UNIX 衍生版 OS - 我不知道转换行结尾的 Windows 工具是什么 - 但如果您有 Vim可以使用命令 ff=unix
并将文件写回以更改行结尾。
或者,您可以简单地删除这一行:
fileScanner.useDelimiter("\n");
...并且扫描器将正确处理您的 dos 行结尾。
我正在为随机词生成器开发一个淫秽过滤器,以便它避免某些词或短语。到目前为止代码相当简单,我正在使用一些测试词来尝试它,但是已经出现了一个对我来说完全没有意义的奇怪错误。
final List<String> obscene;
WordEngine(){
obscene = new ArrayList<>();
loadObscene();
System.out.println(isObscene("otestingo"));
}
void loadObscene(){
try {
InputStream configStream = Interactions.class.getResourceAsStream("obscene.txt");
Scanner fileScanner = new Scanner(configStream);
fileScanner.useDelimiter("\n");
String nextWord;
while(fileScanner.hasNext()){
nextWord = fileScanner.next();
obscene.add(nextWord);
}
}catch(Exception e){
System.out.println(e);
}
//for(String obsceneIterator : obscene){ System.out.println(obsceneIterator); }
}
boolean isObscene(String word){
for (Iterator<String> it = obscene.iterator(); it.hasNext();) {
String nextObscene = it.next();
String test = nextObscene;
System.out.println(test);
System.out.println(test + " " + word);
if(word.contains(nextObscene)){
return true;
}
}
return false;
}
文本文件包含:
words
for
testing
输出为:
words
otestingo
for
otestingo
testing
otestingo
false
预期输出为:
words
words otestingo
for
for otestingo
testing
testing otestingo
true
有关连接字符串或访问它的问题导致它被删除。我已经尝试了所有我能想到的探索,但没有找到任何方法来理解我期望的和我得到的之间的差异。
在您的文本文件中使用 UNIX 行结尾 (\n
) 时,您的程序会产生您期望的输出。但是,如果您使用 dos 行结尾,您(几乎)会得到您描述的输出。我看到的真实输出是:
words
otestingo
for
otestingo
testing
otestingo
false
您可能没有使用 UNIX 衍生版 OS - 我不知道转换行结尾的 Windows 工具是什么 - 但如果您有 Vim可以使用命令 ff=unix
并将文件写回以更改行结尾。
或者,您可以简单地删除这一行:
fileScanner.useDelimiter("\n");
...并且扫描器将正确处理您的 dos 行结尾。