3
String str = "ABthatCDthatBHthatIOthatoo";     
System.out.println(str.split("that").length-1);

从这里我得到 4. 这是正确的,但如果最后一个后面没有任何字母,那么它会显示错误的答案“3”,如下所示:

String str = "ABthatCDthatBHthatIOthat";
System.out.println(str.split("that").length-1);

我想计算给定字符串中“那个”单词的出现次数。

4

5 回答 5

4

您可以为最终的“空”令牌指定一个限制

System.out.println(str.split("that", -1).length-1);
于 2017-09-03T11:36:23.910 回答
2

str.split("that").length 不计算 'that's 的数量。它计算在它们之间有“那个”的单词的数量

例如-

class test
{
 public static void main(String args[]) 
 {
     String s="Hi?bye?hello?goodDay";
     System.out.println(s.split("?").length); 
 }
}

这将返回 4,即用“?”分隔的单词数。如果返回length-1,在这种情况下,它将返回3,这是问号数的正确计数。

但是,如果字符串是:“Hi????bye????hello?goodDay??”; ?

即使在这种情况下, str.split("?").length-1 也会返回 3,这是问号数的错误计数。

str.split("that //or anything")的实际功能是创建一个字符串数组,其中所有这些字符/单词都由 'that' 分隔(在这种情况下)。split() 函数返回一个字符串数组

所以,上面的 str.split("?") 实际上会返回一个字符串数组: {"Hi,bye,hello,goodDay"}

str.split("?").length 只返回数组的长度,其中 str 中的所有单词都用 '?' 分隔 .

str.split("that").length 只返回数组的长度,其中 str 中的所有单词都由 'that' 分隔。

这是我解决问题链接的链接

如果您有任何疑问,请告诉我。

于 2017-09-03T11:56:43.353 回答
1

我希望这会有所帮助

public static void main(String[] args) throws Exception 


{   int count = 0;
        String str = "ABthatCDthatBHthatIOthat"; 
        StringBuffer sc = new StringBuffer(str);

    while(str.contains("that")){

        int aa = str.indexOf("that");
        count++;
        sc = sc.delete(aa, aa+3);
        str = sc.toString();


    }

    System.out.println("count is:"+count);


 }
于 2017-09-03T12:39:26.283 回答
1

尝试这个

String fullStr = "ABthatCDthatBHthatIOthatoo";
String that= "that";
System.out.println(StringUtils.countMatches(fullStr, that));

使用来自apache common lang的StringUtils,这个https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/src-html/org/apache/commons/lang/StringUtils.html#line.170

于 2017-09-03T11:35:27.007 回答
1

使用 lastIndexOf() 找出子字符串“that”的位置,如果它位于字符串的最后位置,则将 cout 增加 1。

于 2017-09-03T11:39:23.953 回答