2012-04-27 9 views
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 

それは最後の文字が欠けていますか?誰かが私にこれを解決するのを助けてもらえますか

+0

文字列が常に同じ文字を順番に並べるようにするのは適切な仮定ですか? – Sanchit

+1

ループは1ではなく0で始めるべきですか? – danielbeard

+0

@ダニエルビアード:いいえ、最初の文字を 'first.charAt(i - 1)'で処理しているので、1から始まるループは問題ありません。最後の実行の 'count'と* character *は' result'に追加されません。 –

答えて

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); 
+0

大きな違いはありませんが、 'Character'を' char'に戻して編集しました。この単純化の前にnull-charを追加する必要がありました。 –

+0

清潔でプロフェッショナルなコード。 ありがとうMarko Toponik! – LeePhan

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); 
} 
+0

+1現在、チャプタが変更されたときにのみログに記録するので、最後には呼び出されません。 –

+0

ありがとうcodaddict! – LeePhan

0

隠しもありますつまり、複数の出現を伴うシーケンスで終了する場合は、何も書き込まれません。

この問題、あなたが検出された問題を解決する最も簡単な方法は、ブロックの

[...] 
    } 
    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); 
} 
+0

ありがとうD.Cannone! – LeePhan

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"); 
} 
} 
1
public static void countContinuosOccurence() { 

    String[] input = "ABBCDDDEFGGH".split(""); 
     String out = ""; 
     for (int i = 0; i < input.length; i++) { 
      int repeatedCharCount = 1; 
      String currentChr = input[i]; 
      if (!(i == input.length - 1)) { 
       while (input[i].equals(input[i + 1])) { 
        repeatedCharCount++; 
        i++; 
       } 
      } 
      out = out + repeatedCharCount + currentChr; 
     } 

     System.out.println(out); 

}