2015-08-02 3 views
6

Bitte helfen Sie mir, ich möchte die Zeichenfolge AABSSSD zu 2AB3SD übertragen werden (jemand nannte es Verschlüsselung). Dies ist, wie ich es beheben:Transformieren Sie die Zeichenfolge "AABSSSD" zu "2AB3SD"

public class TransformString { 

    public static void main(String[] args) { 
     String str = "AABSSSD"; 
     StringBuilder newStr = new StringBuilder(""); 
     char temp = str.charAt(0); 
     int count = 0; 
     for (int i = 0; i < str.length(); i++) { 
      if (temp == str.charAt(i)) { 
       count++; 
      } else { 
       newStr.append(count); 
       newStr.append(temp); 
       count = 0; 
      } 
      temp = str.charAt(i); 
      if(i == (str.length() - 1)){ 
       newStr.append(str.charAt(i)); 
      } 
     } 
     String x = String.valueOf(newStr); 
     x = x.replace("0", ""); 
     System.out.print(x); 
    } 
} 

aber die Ausgabe ist,

2AB2SD 

Dieses Ergebnis ist nicht genau aussehen wie ich will.

Bitte helfen Sie mir, "AABSSSD" zu "2AB3SD" zu transformieren.

Antwort

3

In Ihrem else Teil, den Sie gegen 1 statt 0 als neuer Charakter,

else { 
    newStr.append(count); 
    newStr.append(temp); 
    count = 1;//Just change this 
} 

und ersetzen 1 statt 0 vom Stringx = x.replace("1", ""); weil 0A nicht gültig aussehen wie ein erstes Auftreten ist es festgelegt sollte A trat einmal in der String auf, also sollte es 1A statt 0A sein.

1

Ihr else Teil ist fehlerhaft. Bitte bearbeiten Sie es wie:

newStr.append(count); 
newStr.append(temp); 
count = 1; 

statt:

newStr.append(count); 
newStr.append(temp); 
count = 0; 
1

Was ist ein wenig von Java 8? :-)

String str = "AABSSSD"; 
String x = Arrays.stream(str.split("")) 
    .collect(Collectors.groupingBy(Function.identity())).values().stream() 
    .map(l -> (l.size() > 1 ? l.size() : "") + l.get(0)) 
    .collect(Collectors.joining()); 
System.out.println(x); 
Verwandte Themen