我正在制作一个Lipogram程序,其中打印带有禁止字母的任何单词,但是,这些单词有时会被打印两次。如何让它不重复这些词?
这是我的代码:
public String allWordsWith(char letter) {
String str = "";
String word = "";
s = s.replace(".", " ");
s = s.replace(",", " ");
s = s.replace("?", " ");
s = s.replace("!", " ");
s = " " + s + " ";
for (int i = 0; i <= s.lastIndexOf(letter); i++) {
if (s.charAt(i) == letter) {
if (str.contains(s.substring(s.lastIndexOf(" ", i), s.lastIndexOf(" ", i) + 1) + '\n') == true) {
} else {
word += s.substring(s.lastIndexOf(" ", i), s.indexOf(" ", i)) + '\n';
str += word;
}
}
}
return str;
}
答案 0 :(得分:0)
重要说明:函数是否在字符串“hello hi hello howdy”中选择为“o”的字母运行,意味着返回“hello hello howdy”或“hello howdy”。即,如果单词出现两次,你想要打印两次,还是只想打印一次而不管重复?
如果只重复一次,那么您应该使用Set来存储数据。
但是,我认为你有可能会遇到一个问题,即在运行函数时,在同一个字符串上选择“l”作为“l”,“你好你好你好”,你得到一个输出“你好你好你好你好”。正确的吗?
这里的问题是你正在检查每个字母,而不是测试每个字。要解决这个问题,我会使用:
String[] words = s.split(" ");
创建一个单词数组。使用以下命令测试该数组中的每个值以查看它是否包含给定的字母:
if(words[index].contains(letter)){
str += " " + words[index];
}