-2

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

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

String word = "pizzaz"

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

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

int letterAmount = 3;

4

5 回答 5

7

您可以使用正则表达式来做到这一点。按照你的例子:

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

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

于 2013-01-02T00:23:21.927 回答
5

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

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

"z"从原始字符串的长度中减去所有 s 的字符串长度时,您最终得到z原始字符串中 s 的数量。

于 2013-01-02T00:23:24.313 回答
2

使用Apache Commons

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

或使用 Spring 的StringUtils版本

boolean hasThreeZs = StringUtils.countOccurrencesOf("pizzaz", "z") == 3;
于 2013-01-02T00:20:32.827 回答
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) 时间。

于 2013-01-02T00:37:34.057 回答
0
String word = "pizzaz";    
System.out.println(word.replaceAll("[^z]","").equals("zzz"));
于 2013-01-02T00:41:18.290 回答