我正在创建一个静态方法“indexOfKeyword”,当字符串没有嵌入到另一个单词中时,它将返回一个indexOf字符串-当没有嵌入时,它将返回-1。
给定
String s = "She sells seashells by the seashore.";
String keyword = "sea";
输出意味着是-1,因为关键字“sea”被嵌入到每个词中;然而,我的代码输出10,即在“seashells”中第一次找到“sea”的位置。
如果字符串在开头单独出现,例如
String s = "Carolyn has a car that is scary fast.";
String keyword = "car";
我做了一个startIdx
必须大于0的例子,这样“Carolyn”中的“Car”就不会被选中。当上面的代码被输入到下面的代码中时,它会按预期工作,正确地输出14。
下面是应该输出-1的完整代码:
public class Chatter {
public static int indexOfKeyword(String s, String keyword) {
s = s.toLowerCase();
keyword = keyword.toLowerCase();
int startIdx = s.indexOf(keyword);
while (startIdx >= 0) {
String before = " ", after = " ";
if (startIdx > 0) {
before = s.substring(startIdx - 1, startIdx);
}
int endIdx = startIdx;
if (endIdx < s.length()) {
after = s.substring((startIdx + keyword.length()), (startIdx + keyword.length() + 1));
}
if (!(before.compareTo("a") >= 0 && before.compareTo("z") <= 0 && after.compareTo("a") >= 0
&& after.compareTo("z") <= 0)) {
if (startIdx > 0) {
return startIdx;
}
}
startIdx = s.indexOf(keyword, s.indexOf(keyword) + 1);
}
return -1;
}
public static void main(String[] args) {
// ... and test it here
String s = "She sells seashells by the seashore.";
String keyword = "sea";
System.out.println(indexOfKeyword(s, keyword));
}
}
2条答案
按热度按时间x6492ojm1#
对不起,也许我误解了你的意思,但是你有没有考虑过在搜索之前用空格把你的键盘括起来?
这样的事情(理论上)应该行得通:
或者(正如@Tom所指出的)可以使用RegEx,但是这个解决方案更复杂,可能不像您希望的那样明显。
在您的情况下,它可能如下所示:
hkmswyz62#
我理解您想要查找特定的单词而不是特定的子字符串。
您的方法
indexOfKeyword
中有两个错误。while
循环中的条件是错误的。您需要将其拆分为两个单独的条件。1.设置
startIdx
以搜索下一个keyword
也是错误的。将您的代码与下面的代码进行比较。
正如@Tom在他的评论中提到的,还有其他的方法来解决这个问题。我假设你的目的是提出并实现你自己的算法,因此我已经向你展示了你在实现中的错误之处。
注意,单个空格不是分隔句子中单词的唯一方式,例如,句子中的两个单词可以用逗号分隔。