我想找出每个字符的出现顺序。
例如。for input abcddec output应该是a1b1c1d1d2e1c2,但是我的代码给出的输出是a1b1c2d2e1c2
我应该做些什么改变?
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);
}
}发布于 2016-07-07 16:35:57
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。
发布于 2016-07-07 16:41:12
避免使用的替身。将状态存储在地图或其他文件中:
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());发布于 2016-07-07 16:33:39
每次字符出现在字符串中时,您的计数技术都会进行计数,而不是在字符串+ 1中字符出现在字符之前时进行计数。您需要将for循环更改为如下所示:
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循环中字符之前的每个字符,并检查它们是否相等
https://stackoverflow.com/questions/38240742
复制相似问题