2014-03-28 60 views
0

公共類NoOfConsAlphabet {計劃,以找到連續的字母和打印

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    String str="aaabbddaabbcc"; 
    int count=1; 
    String finalString=""; 
    for(int i=1;i<str.length()-1;i++) 
     { 
      if(str.charAt(i)==str.charAt(i+1)) 
      { 
       ++count; 

      } 
      else 
      { 

       finalString+=str.charAt(i)+count+","; 
       count=1; 
      } 

     } 
    System.out.println(finalString); 
    } 

}

我得到這個作爲我的O/P:99,100,102,99,100, 誰能告訴我怎麼去這解決不知道這是什麼?

但是下面的程序中使用的Split Works 公共類NoOfConsAlphabet {

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    String str="aaabbddaabbcc"; 
    String[] splitString=str.split(""); 
    int count=1; 
    String finalString=""; 
    for(int i=1;i<str.length()-1;i++) 
     { 
      if(splitString[i].equals(splitString[i+1])) 
      { 
       ++count; 

      } 
      else 
      { 

       finalString+=splitString[i]+count+","; 
       count=1; 
      } 

     } 
    System.out.println(finalString); 
    } 

} O/P:A3,B2,D2,A2,B2,

+1

你是什麼意思連續的字母?基於預期的輸出,它看起來像你所需要做的就是檢查'charAt(i)== charAt(i + 1)'? –

+0

在調試器中運行它會發生什麼? – CPerkins

+0

在連接到finalString上,我得到了字符w/o計數的ascii碼: – user3296744

回答

0

user3296744似乎是工作的算法上是Run-length encoding

這裏的問題不只是實際的輸出:

"o/p:a1b3d2a2b2c2" 

不匹配所需的輸出:

"o/p:3a, 2b, 2d, 2a, 2b, 2c" 

但仔細觀察,從實際的輸出計數轉移一個是關於所附信件的;也就是說,3應與a匹配,它與b匹配,依此類推。

如果您運行在調試模式下與線後破發點代碼:

String[] str2=str.split(""); 

你會發現str2陣列是不太你所期望的。它不是一個有13個元素的數組,它實際上有14個元素,第一個元素是null

因此,我建議您避免使用split()函數,而不是將字符串拆分爲數組,您可以使用charAt()函數來訪問所需的字符。注意:這可能需要您將for循環修改爲標準版本而不是每個版本。

+0

好的......感謝噸...... @ Alan – user3296744

0

我敢肯定,這可以做短,甜,但...

public class Main { 

    public static void main(String[] args) { 
     findAndPrintConsecutiveCharacters("aaabbddaabbcc"); 
    } 

    private static void findAndPrintConsecutiveCharacters(String sToPrint){ 

     for(int i = 0; i < sToPrint.length(); i ++){ 
      char c = sToPrint.charAt(i); 
      int occurences = 1; 

      if(i <= sToPrint.length() - 2) { //limit the nested for so we dont go out of bounds 

      for (int i2 = i + 1; i2 < sToPrint.length(); i2 ++){ 
       char c2 = sToPrint.charAt(i2); 

       if(c2 == c) 
        occurences += 1; 
       else{ 
        i += occurences - 1; //shift i by the amount of occurences, this will prevent counting consecutive chars multiple times 
        break; 
       } 
      } 

      } 
      else 
       break; //we are on our last char 

      System.out.println(String.valueOf(occurences) + String.valueOf(c)); 
     } 

    } 

} 

輸出

3a 
2b 
2d 
2a 
2b 
2c 

我會建議你使用更好的命名約定和已定義的結構,如字符串。 charAt()而不是用空的正則表達式分割。如果你對它有所瞭解,你可能會有什麼工作,但是如果你正在重新分配這個「指針」,就會讓你非常困惑。