字符串中每个字符的出现次数

时间:2012-01-06 16:18:58

标签: java string char find-occurrences

  

可能重复:
  Count occurrences of each unique character

如何获取字符串中每个字符的出现次数?例如:

“计算器”: S:1 T:1 答:1 C:1 K:1 ○:2 五:1 E:1 R:1 F:1 L:1 ○:1 瓦特:1

8 个答案:

答案 0 :(得分:3)

Guava救援!我简直不敢相信,这是一个单行内容!

Multiset<Character> distintCharsAndCount = HashMultiset.create(
    Chars.asList("ssssssssstackoverflow".toCharArray())
);

Chars.asList帮助我们将字符串转换为真实的非基元集合。 MultiSet是你所追求的完美结构:它是一个保留不同元素的集合,但也保留集合中的出现次数。

以这种方式访问​​:

int sCount = distintCharsAndCount.count('s'); //sets it to 9

答案 1 :(得分:2)

使用键作为字符和整数计数创建HashMap作为值。

HashMap<Character, Integer> hm = new HashMap<Character, Integer>()
for (int i = 0; i < str.length; i++) {
    if (hm.get(str.charAt(i))) {
        int temp = hm.get(str.charAt(i));
        hm.put(str.charAt(i), ++temp);
    } else {
        hm.put(str.charAt(i), 1);
    }
}

答案 2 :(得分:1)

我建议使用字符中的地图来计算并迭代字符数组添加到地图或计数

答案 3 :(得分:1)

Map<Character, Integer> chars = new HashMap<Character, Integer>();
for (int i = 0; i < str.length; i++) {
    char c = str.charAt(i);

    Integer count = chars.get(c);
    if (count == null) {
        chars.put(c, 1);
    } else {
        chars.put(c, count + 1);
    }
}

答案 4 :(得分:1)

我过去做过的一个简单而直观的方法是将字符转换为int,然后只使用数组。使用Map是一种更好的方法,但这听起来像是一个家庭作业问题,对于初学者来说,使用强制转换和数组更合乎逻辑(imo)。

int counts[] = new int[26];
String s = 'stackoverflow';
s = s.toLowerCase();
for (int i = 0; i < s.length(); i++) {
    int val = (int)(s.charAt(i)) - 97;
    counts[val]++;
}

答案 5 :(得分:0)

您可以解析字符串并创建Map<Character, Integer>,以便整数(地图中的值)表示字符 c的次数(地图中的键)出现在字符串中。

答案 6 :(得分:0)

public static Map<Character, Integer> count(String s) {
  Map<Character, Integer> result = new HashMap<Character,Integer>();
  for (int i = 0; i < s.length(); ++i) {
    char c = s.charAt(i);
    Integer n = result.get(c);
    result.put(c, n == null ? 1 : n + 1);
  }

  return result;
}

答案 7 :(得分:0)

String input = "stackoverflow";

// desired output: s:1 t:1 a:1 c:1 k:1 o:2 v:1 e:1 r:1 f:1 l:1 o:1 w:1
Map<Character,Integer> counts = new HashMap<Character, Integer>
( Math.min(input.length(),Character.MAX_VALUE) / 2 );
char ch;
for (int i=0; i<input.length(); ++i)
{
  ch = input.charAt(i);
  if ( !counts.containsKey(ch)) { counts.put(ch,0); }
  counts.put(ch, counts.get(ch)+1 );
}

for (Map.Entry<Character,Integer> entry : counts.entrySet() )
{
  out.print( entry.getKey() );
  out.print( ":" );
  out.print( entry.getValue());
  out.print( " " );
}