首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按顺序统计字符的出现次数

问按顺序统计字符的出现次数
EN

Stack Overflow用户
提问于 2016-07-07 16:24:29
回答 5查看 803关注 0票数 1

我想找出每个字符的出现顺序。

例如。for input abcddec output应该是a1b1c1d1d2e1c2,但是我的代码给出的输出是a1b1c2d2e1c2

我应该做些什么改变?

代码语言:javascript
复制
package com.Java8;

public class Occurences {

    public static void main(String[] args) {

        String str = "abb";
        char[] arr = str.toCharArray();
        String result = "";
        for (int i = 0; i < arr.length; i++) {
            int count = 0;
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    count++;
                }
            }
            result = result + arr[i] + count;
        }
        System.out.println(result);
    }
}
EN

回答 5

Stack Overflow用户

发布于 2016-07-07 16:35:57

代码语言:javascript
复制
String str = "abcddecca";
char[] arr = str.toCharArray();
StringBuilder sb = new StringBuilder();
Map<Character, Integer> counters = new HashMap<>();
for( int i = 0; i < arr.length; i++ ) {
  Integer count = counters.get( arr[i] );
  if ( count == null ) {
    count = 1;
  } else {
    count++;
  }
  counters.put( arr[i], count );
  sb.append( arr[i] );
  sb.append( count );
}
System.out.println( sb );

我更喜欢创建一些计数器状态容器,并避免双重FOR循环。此外,在循环中使用字符串连接也不是一个好的做法,最好使用StringBuilder。

票数 1
EN

Stack Overflow用户

发布于 2016-07-07 16:41:12

避免使用的替身。将状态存储在地图或其他文件中:

代码语言:javascript
复制
    String str="abbcece";
    char []charArray=str.toCharArray();
    StringBuilder result = new StringBuilder();
    Map<Character, Integer> occurenceMap = new HashMap<Character, Integer>();
    for(Character character:charArray){
        Integer occ = 1;
        if(occurenceMap.containsKey(character)){
            occ =  occurenceMap.get(character)+1;
        }
        occurenceMap.put(character, occ);
        result.append(character).append(occ);
    }

    System.out.println(result.toString());
票数 1
EN

Stack Overflow用户

发布于 2016-07-07 16:33:39

每次字符出现在字符串中时,您的计数技术都会进行计数,而不是在字符串+ 1中字符出现在字符之前时进行计数。您需要将for循环更改为如下所示:

代码语言:javascript
复制
for (int i = 0; i < arr.length; i ++){
    int count = 1;
    for (int j = 0; j < i; j ++){
        if(arr[i] == arr[j]){
            count ++;           
        }
    }
    result = result + arr[i] + count;
}

这将遍历for循环中字符之前的每个字符,并检查它们是否相等

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38240742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档