我查看了java 6中的字符串API,
我没有找到任何选项来接收特定子字符串出现在字符串上的数字量。
例如,我想知道字符串中出现“is”或“not”多少次 “noisxxnotyynotxisi”。
我可以用循环做很长的路,但我想知道是否有更简单的方法。
感谢。
编辑:我正在使用Java 6.
答案 0 :(得分:4)
org.apache.commons.lang.StringUtils.countMatches
方法可能更受欢迎。
答案 1 :(得分:2)
不使用外部库,您可以在循环中使用String.indexOf(String str, int fromIndex);
。
更新此示例完全有效。
/**
* @author The Elite Gentleman
* @since 31 March 2011
*
*/
public class Test {
private static final String STR = "noisxxnotyynotxisi";
public static int count(String str) {
int count = 0;
int index = -1;
//if (STR.lastIndexOf(str) == -1) {
// return count;
//}
while ((index = STR.indexOf(str, index + 1)) != -1) {
count++;
}
return count;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Test.count("is"));
System.out.println(Test.count("no"));
}
}
答案 2 :(得分:0)
你可以这样做,但循环会更快。
String text = "noisxxnotyynotxisinono";
String search = "no";
int count = text.split(search,-1).length-1;
System.out.println(Arrays.toString(text.split(search,-1)));
System.out.println("count= " + count);
打印
[, isxx, tyy, txisi, , ]
count= 5
如果文本以搜索值开头或结尾,您可以看到这是正确的。 -1参数阻止它删除尾随分隔符。
你可以使用一个带有indexOf()的循环,它更有效,但不是那么简单。
BTW:Java 5.0自2007年8月以来一直是EOL。也许现在是时候看看Java 6.(尽管文档很相似)