我正在尝试用Java创建一个ubbi dubbi检测器。我目前正在尝试计算字符串中有多少个ub,并将它们加到计数器中,然后如果我输入的int下有某个数字,则它不是ubbi dubbi,但等于或大于ubbi那就是ubbi dubbi。不允许使用正则表达式,字符串生成器或数组。
这是我目前所拥有的:
public static boolean detect(String phrase) {
boolean isUbbi = false;
int count = 0;
CharSequence ub = "ub";
if (phrase.contains(ub)) {
count++;
}
if (count >= 2) {
isUbbi = true;
} else {
isUbbi = false;
}
return isUbbi;
}
最佳答案
在您的情况下,成为true
的条件永远不会满足。
因为
if (phrase.contains(ub)) {
count++;
}
条件是
if (count >= 2) { // never met. Always false.
那将检查一次事件然后完成。需要更多的实现来检查没有涉及
loop
和sub-string
等的事件。如果您可以自由使用Apache commons library
采用
int count = StringUtils.countMatches(phrase, "ub");
如果没有图书馆,
String mainString = "ububsdfub";
Pattern pat = Pattern.compile("ub");
Matcher matcher = pat.matcher(mainString);
int count = 0;
while (matcher.find()) {
count += 1;
}
System.out.println(count); // prints 3 since 3 ub's are there.
使用基本操作拆分(内部使用正则表达式)
String mainString = "ububsdfUb";
String occurance = "ub";
System.out.println(mainString.split(occurance, -1).length-1);
甚至不允许拆分
String mainString = "ububsdfub";
String occurance = "ub";
int index=0;
int count=0;
while ((index = mainString.indexOf(occurance, index)) != -1) {
count++;
index += occurance.length() - 1;
}
System.out.println(count);