在java中查找子字符串

时间:2011-03-31 15:05:52

标签: java string

我查看了java 6中的字符串API,

我没有找到任何选项来接收特定子字符串出现在字符串上的数字量。

例如,我想知道字符串中出现“is”或“not”多少次 “noisxxnotyynotxisi”。

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

感谢。

编辑:我正在使用Java 6.

3 个答案:

答案 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.(尽管文档很相似)