2015-08-13 53 views
2

我試圖從字符串中刪除重複的字符。例如,如果我輸入字符串abaqueru它應該給我bqer重複字符au刪除。但是,結果是一個不必要的循環。這裏是代碼:刪除字符串中的重複字符

public class question { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    String s = "abaqueru"; 

    calculate(s); 
    // TODO code application logic here 
} 

public static void calculate(String s){ 
    String result; 

     for(int i = 0; i < s.length(); i++) 
     { 
      char c = s.charAt(i); 
      char temp; 
      temp=c; 
      for(int j = 1; j < s.length(); j++) 
       { 

        char x = s.charAt(j); 
        if(temp==x){ 
         s=s.replaceAll(""+temp,""); 
         calculate(s); 
        } 



       } 

      System.out.println(s); 
     } 

} 
+0

不要完全改變你的問題.ask新的一個,如果你有另一個問題 –

+0

對不起,我不知道這一點。 – Furkan

回答

2

我會去與導致堆棧溢出錯誤的Suresh Atta's Answer。 我也檢查了你的邏輯。已經做了一些必要的修改

public class Question { 




    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     String s = "abaqueru"; 

     calculate(s); 
     // TODO code application logic here 
    } 

    public static void calculate(String s){ 
     String result; 

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

       char temp; 
       temp=c; 
       for(int j = i+1; j < s.length(); j++) 
        { 

         char x = s.charAt(j); 
         if(temp==x){ 

          s=s.replaceAll(""+temp, ""); 

          break; 
         // calculate(s); 
         } 



        } 


      } 

      System.out.println(s); 

    } 

} 

但是,這可以進一步定製,以達到在空間和時間方面的表現。事實上,更簡單的邏輯可以使用:)

7

String在java中是不可變的。替換後,您需要將其分配回去

s=s.replaceAll(""+temp,""); 

如果您未將其分配回去,則循環會一直持續。

這解決了計算器的錯誤,我沒有專注於你的實際的邏輯:)

+0

我糾正它,謝謝,但我想我也有算法問題,帶我不必要的循環。 – Furkan

1

與蘇雷什阿塔的答案肯定去!不過,我想我會幫你瀏覽一下你的代碼,以幫助你發現你的錯誤在哪裏。

我只是瞥了一下代碼中的邏輯,但肯定有一些東西值得一看。最值得注意的是j永遠不會用在內部for循環中。實際上,如果您使用的是IDE,它應該警告您永遠不會使用j

UPDATE:另外,考慮使用String.valueOf(char c)代替s=s.replaceAll(""+temp,""); 叫你在if(temp==x)病情有。也就是說,我假設你可以將角色投射到一個字符串?然後你可以使用String.append(),你可以在我發給你的鏈接上閱讀!

+0

我糾正了j從未使用過的問題。 – Furkan

+0

是的,在那裏,如果我發現任何字符串中的字母重複,我用「」(空格)更改該複製的字母。我使用//「」+ temp //用於字符串解析 – Furkan

+0

如果在內部for循環中不使用'j',則所有3個字符變量將相同。請注意,您每次通過inner for循環抓取相同的字符,從而將它與保證等於的字符進行比較。換句話說,你正在抓住角色(在地點'我')'j'次。 –