我搜索了一个方法来计算一个字符在String中的次数并找到了一个很好的解决方案
temp.length() - temp.replaceAll("T", "").length()
这里,我们正在计算'T'在临时的时间......
问题是,它无法正常使用'。'
代码:
public static void main(String[] args) {
String temp="TTT..####";
System.out.println(temp.length() - temp.replaceAll("T", "").length());
System.out.println(temp.length() - temp.replaceAll(".", "").length());
System.out.println(temp.length() - temp.replaceAll("#", "").length());
}
输出:
run:
3
9
4
BUILD SUCCESSFUL (total time: 1 second)
根据输出'。'在String.through循环中它是9次,它给出了正确的答案。 有什么问题??
答案 0 :(得分:4)
使用replaceAll("\\.", "").length());
replaceAll()
需要REGEX
作为输入。 .
在REGEX中有特殊含义,它意味着任何字符。你需要使用2 \\
s
编辑:
使用:
String temp = "TTT..####";
System.out.println(temp.split("\\.", -1).length - 1);
//在-1
中使用split()
作为 limit 根据传递的参数划分String(并根据需要提供空字符串作为结果)。因此,在split数组中,您将拥有n+1
个元素,其中n
是特定参数的出现次数。所以,我们正在做length-1
。
答案 1 :(得分:1)
replaceAll()
使用正则表达式,.
匹配任何char
。这就是为什么在这种情况下输出为9的原因
答案 2 :(得分:1)
你可以在一次迭代中找到每个角色的次数,如下所示
Map<Character, Integer> map = new HashMap<>();
for(int i = 0; i < temp.length(); i++)
{
char c = temp.charAt(i);
if(!map.containsKey(c))
{
map.put(c, 1);
}
else
{
map.put(c, map.get(c)+1);
}
}
for(Character c : map.keySet())
{
System.out.println("" + c + " : " + map.get(c));
}
人们已经回答您需要在正则表达式中使用\\.
而不是.
。我只是认为这可能是一个稍微更一般的解决方案,针对这个特殊问题进行了一些小改动。