0

我查看了StringJava 6 中的 API,但没有找到任何方法来计算特定子字符串在给定的String.

例如,我想知道"is""not"在字符串中出现了多少次"noisxxnotyynotxisi"

我可以用循环做很长的路,但我想知道是否有更简单的方法。

谢谢。

编辑:我正在使用 Java 6。

4

3 回答 3

4

org.apache.commons.lang.StringUtils.countMatches方法可能是首选。

于 2011-03-31T15:11:26.547 回答
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"));
    }
}
于 2011-03-31T15:10:22.303 回答
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() 的循环,它更有效,但不是那么简单。

顺便说一句:Java 5.0 自 2007 年 8 月以来一直 EOL。也许是时候看看 Java 6。(尽管文档非常相似)

于 2011-03-31T15:08:54.003 回答