我的 String words
包含一堆由 \n
分隔的单词(并以 \n
结尾)。
代码将单词添加到字符串中,前提是该单词不存在。这些代码块位于 for
循环中,w
是要添加的词。
我有
loop: if (w.contains("" + letter)) //This is just to test the words I want to add
{
for (String s : words.split("\n"))
if (w.equals(s))
break loop;
words += w + "\n";
}
和
if (w.contains("" + letter))
{
if (!words.contains("\n"+w+"\n") && words.indexOf(w+"\n") != 0)
words += w + "\n";
}
但两者都以各自的方式看起来很困惑。有没有其他方法可以解决这个问题,或者哪种方法执行得更快。
最佳答案
首先,if
不是一个循环。所以没有必要标记它以便使用标记的中断。
其次,您的两个代码都没有真正按照您所说的去做。另外,我不明白你为什么要做 if (w.equals(s))
这个测试。 w
的用途是什么。
你说:- w 是要添加的单词
,但你又说了一遍,你将在 "\n"
上拆分字符串后添加单词>,如果它不在您的 array
中。因此,您要添加很多词,而不仅仅是一个词。请重新阅读您的帖子,并在必要时进行编辑。
根据您当前的问题陈述,我会这样处理:-
- 首先在
"\n"
上拆分您的行以获得包含单个单词的数组。 - 如果我想在每次迭代时修改我的字符串,我宁愿使用
StringBuilder
或StringBuffer
。 - 现在,在每次迭代中,检查您的
StringBuilder
是否已经包含该word
。如果不包含,则附加它,否则保留它。 - 在循环结束时,打印您的
StringBuilder
实例。
或者,正如您所说,您也可以使用 ArrayList
来存储您的单词。或者,如果您只需要 unique
单词,则应该改用 Set
。那不需要你做测试。它自己处理重复项:-
List<String> wordList = new ArrayList<String>();
Set<String> set = new LinkedHashSet<String>();
for (String s : words.split("\n")) {
if (s.contains("" + letter)) {
if (!wordList.contains(s)) {
wordList.add(s); // Add to list.
}
set.add(s); // Add to set.
}
}
然后通过遍历它们中的任何一个来打印您的 ArrayList
或 Set
。
关于java - 检查字符串是否有特定的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489419/