3 回答
TA贡献1995条经验 获得超2个赞
public int countChar(String str, char c)
{
int count = 0;
for(int i=0; i < str.length(); i++)
{ if(str.charAt(i) == c)
count++;
}
return count;
}
这绝对是最快的方法。正则表达式在这里要慢得多,并且可能很难理解。
TA贡献1775条经验 获得超11个赞
不是最佳方法,而是简单的计数发生次数的方法:
String s = "...";
int counter = s.split("\\$", -1).length - 1;
注意:
美元符号是特殊的正则表达式符号,因此必须以反斜杠转义。
反斜杠是转义字符(例如换行符)的特殊符号,因此必须使用反斜杠对其进行转义。
split的第二个参数可防止删除空的尾随字符串。
TA贡献1777条经验 获得超3个赞
由于无论如何都要扫描整个字符串,因此您可以建立完整的字符计数并进行任意数量的查找,而所有操作均以相同的高成本(n)进行:
public static Map<Character,Integer> getCharFreq(String s) {
Map<Character,Integer> charFreq = new HashMap<Character,Integer>();
if (s != null) {
for (Character c : s.toCharArray()) {
Integer count = charFreq.get(c);
int newCount = (count==null ? 1 : count+1);
charFreq.put(c, newCount);
}
}
return charFreq;
}
// ...
String s = "abdsd3$asda$asasdd$sadas";
Map counts = getCharFreq(s);
counts.get('$'); // => 3
counts.get('a'); // => 7
counts.get('s'); // => 6
添加回答
举报