2

これは私のコードです。

public static void countContinuosOccurence() {
    String first = "ABBCDDDEFGGH";
    StringBuffer result = new StringBuffer();
    int count = 1;
    for (int i = 1; i < first.length(); i++) {
        if (first.charAt(i) == (first.charAt(i - 1))) {
            count++;
        } else {
            if (count > 1) {

                result.append(String.valueOf(count) + first.charAt(i - 1));
            } else {
                result.append(first.charAt(i - 1));
            }
            count = 1;
        }
    }
    System.out.println("First String is:"+ first);
    System.out.println("Result is:" + result);
}

結果は次のとおりです。

First String is:ABBCDDDEFGGH
Result is:A2BC3DEF2G

最後の文字がありませんか?誰かがこれを解決するのを手伝ってくれますか?

4

5 に答える 5

3

最高のパフォーマンスではありませんが、最も単純なコード:

final String in = "ABBCDDDEFGGH" + '\u0000';
final StringBuilder b = new StringBuilder();
char prev = in.charAt(0);
int rpt = 0;
for (int i = 1; i < in.length(); i++) {
  final char curr = in.charAt(i);
  if (curr == prev) rpt++;
  else {
    b.append(rpt == 0? prev : "" + (rpt + 1) + prev);
    rpt = 0; prev = curr;
  }
}
System.out.println(b);
于 2012-04-27T08:03:27.910 に答える
3

ループが終了したら、最後に実行された文字のと文字を結果forに追加する必要があります。

public static void countContinuosOccurence() {
    String first = "ABBCDDDEFGGH";
    StringBuffer result = new StringBuffer();
    int count = 1;
    int i;
    for (i = 1; i < first.length(); i++) {
        if (first.charAt(i) == (first.charAt(i - 1))) {
            count++;
        } else {
            if (count > 1) {    
                result.append(String.valueOf(count) + first.charAt(i - 1));
            } else {
                result.append(first.charAt(i - 1));
            }
            count = 1;
        }
    }

    // ADD THIS - to take care of the last run.
    if (count > 1) {    
        result.append(String.valueOf(count) + first.charAt(i - 1));
    } else {
        result.append(first.charAt(i - 1));
    }

    System.out.println("First String is:"+ first);
    System.out.println("Result is:" + result);
}
于 2012-04-27T07:15:32.130 に答える
0

隠れた問題もあります。つまり、複数回出現するシーケンスで終了する場合、何も書き込まないということです。

この問題と検出した問題を解決する最も簡単な方法は、forブロックの後に最終チェックを追加することです。

[...]
    }
    int l = first.length();
    if (count > 1) {
        result.append(String.valueOf(count) + first.charAt(l - 1));
        } else {
            result.append(first.charAt(l - 1));
        }
    }
    System.out.println("First String is:"+ first);
    System.out.println("Result is:" + result);
}
于 2012-04-27T07:26:08.000 に答える
0
import java.util.*;
public class HelloWorld{
public static void main(String []args){
    System.out.println("Hello World");
    String first = "ABBCDDDEFGGHhhhhh456456456{{{67}}}";
StringBuffer result = new StringBuffer();
result.append(first);
System.out.println(result);
    Map<Character,Integer> map = new HashMap<Character,Integer>();
for(int i = 0; i < first.length(); i++) {
char c = first.charAt(i);
if (map.containsKey(c)) {
int cnt = map.get(c);
map.put(c, ++cnt);
} else {
map.put(c, 1);
}

}
Set set = map.entrySet(); 
// Get an iterator 
Iterator itr = set.iterator(); 
// Display elements 
while(itr.hasNext()) { 
Map.Entry me = (Map.Entry)itr.next(); 
System.out.print(me.getKey() + ": "); 
System.out.println(me.getValue()); 
} 
System.out.println("Hello World1");
 }
}
于 2013-05-20T18:33:35.527 に答える