我查看了String
Java 6 中的 API,但没有找到任何方法来计算特定子字符串在给定的String
.
例如,我想知道"is"
或"not"
在字符串中出现了多少次"noisxxnotyynotxisi"
。
我可以用循环做很长的路,但我想知道是否有更简单的方法。
谢谢。
编辑:我正在使用 Java 6。
org.apache.commons.lang.StringUtils.countMatches
方法可能是首选。
在不使用外部库的情况下,您可以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"));
}
}
你可以这样做,但循环会更快。
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() 的循环,它更有效,但不是那么简单。
顺便说一句:Java 5.0 自 2007 年 8 月以来一直 EOL。也许是时候看看 Java 6。(尽管文档非常相似)