使用java的字符串中字符的次数?

时间:2014-08-06 11:30:10

标签: java

我搜索了一个方法来计算一个字符在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次,它给出了正确的答案。 有什么问题??

3 个答案:

答案 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));
}

人们已经回答您需要在正则表达式中使用\\.而不是.。我只是认为这可能是一个稍微更一般的解决方案,针对这个特殊问题进行了一些小改动。