如果String包含特定字母的确切次数

时间:2013-01-02 00:17:17

标签: java string

在Java中,有没有办法说...例如“这个词是否包含Z三次?”

我猜可能会有一些聪明的char值?

String word = "pizzaz"

// Check if word contains three z's
boolean b = word.contains("SOME CLEVER CHAR VALUE??"); 

如果可能,在通过“次数”时可以使用整数值,即

int letterAmount = 3;

5 个答案:

答案 0 :(得分:6)

您可以使用正则表达式来执行此操作。按照你的例子:

word.matches(".*(z.*){3}.*")

如果您的字符串有3个z,则返回true。

答案 1 :(得分:5)

计算单字符匹配的一种有点昂贵且迂回的方法如下:

String s = "pizzaz";
int numMatches = s.length() - s.replaceAll("z", "").length();

如果从原始字符串的长度中减去删除了所有"z"的字符串的长度,则最终会得到原始字符串中z的数量。

答案 2 :(得分:2)

使用Apache Commons

boolean hasThreeZs = StringUtils.countMatches("pizzaz", "z") == 3;

或使用Spring的StringUtils

版本
boolean hasThreeZs = StringUtils.countOccurrencesOf("pizzaz", "z") == 3;

答案 3 :(得分:0)

根据字符串的大小,另一个选项是遍历字符串,计算字符:

public static boolean contansCharCount(String s, char targetC, int targetCount) {
  char[] sArray = s.toCharArray();

  int actualCount = 0;

  for(char c : sArray)
    actualCount = (c == targetC) ? actualCount + 1 : actualCount;

  return (actualCount == targetCount);
}

这需要O(N)时间。

答案 4 :(得分:0)

String word = "pizzaz";    
System.out.println(word.replaceAll("[^z]","").equals("zzz"));