2013-03-24 68 views
1

我只是想寫一個代碼字符串內設置按字母順序排列的話.. 但每當我運行這一點,」進入一個無限循環。我無法弄清楚什麼正好發生......任何人都可以幫我解決問題..下面我附上我的代碼。排號的話按字母順序

public class AscendString { 
    String s=new String(); 

    public AscendString(String x) 
    { 
     s=x.trim(); 
    } 

    public int NoWords() 
    { 
     int i=0; 
     String s1=new String(); 
     s1=s; 
     while(s1.length() > 0) 
     { i++; 
      int j=s1.indexOf(' '); 
      if(j>0) 
      { 
       s1.substring(j+1); 
       s1=s1.trim(); 
      } 
      else 
      s1=""; 
     } 
     return i; 
    } 

    public void Ascend() 
    { 
     String str[]=new String[NoWords()]; 
     String s1=new String(); 
     s1=s; 
     int i=0; 
     while(s1.length() > 0) 
     { 
      int j=s1.indexOf(' '); 
      if(j>0) 
      { 
       str[i]=s1.substring(0,j) ; 
       s1=s1.substring(j+1); 
       s1=s1.trim(); 
       i++; 
      } 
      else 
      { 
       str[i]=s1; 
       s1=""; 
      } 
     } 
     for(int j=0;j < str.length-1;j++) 
     { 
      for(int k=0;k < str.length-1-j;k++) 
      if(str[k].length() > str[k+1].length()) 
      {String temp=str[k]; 
       str[k]=str[k+1]; 
       str[k+1]=temp; 
      } 
     } 
     String str1=""; 
     for(int n=0;n < str.length;n++) 
     str1=str1+str[n] +" " ; 
     System.out.println("The String in Alphabetic Order is: "+str1); 
    } 

    public static void main(String args[]) 
    { 
     AscendString exmpl=new AscendString("I Love Java Programming"); 
     exmpl.Ascend(); 
    } 
} 
+0

每當你不明白你的程序在做什麼,你應該嘗試的第一件事就是通過在調試器中單步執行代碼。 – 2013-03-24 10:27:02

回答

3

嘗試:

s1 = s1.substring(j+1); 

substring回報的子串,不改變字符串,因此這個循環:

while(s1.length() > 0) 
    { i++; 
     int j=s1.indexOf(' '); 
     if(j>0) 
     { 
      s1.substring(j+1); 
      s1=s1.trim(); 
     } 
     else 
     s1=""; 
    } 

將會永存。

+0

三江源主席先生,我只是錯過了它在我的編碼,我糾正它,它給了我預期的結果.. – 2013-03-24 10:57:15

+0

很高興我能幫助!如果你願意,你可以接受答案:) – BobTheBuilder 2013-03-24 11:06:40

4

你爲什麼做這樣難?

String exmpl=new String("I Love Java Programming"); 
String[] parts = exmpl.split("\\s+"); 
Arrays.sort(parts); 
StringBuilder sb = new StringBuilder(); 
for(String s:parts){ 
    sb.append(s); 
    sb.append(" "); 
} 

String sorted = sb.toString.trim(); 
+0

先生,我實際上是新的java..infact我只是一個初學者。我剛剛被教導了基本的字符串操作&datatypes,控制結構,並且我被老師給了這個任務..我不知道字符緩衝區和其他東西datu在這裏編碼... bt似乎對我很有趣&很短,緊湊丹我做了什麼..你會解釋你的步驟plzzz ...我想學習它。 – 2013-03-24 11:02:18

+0

將句子拆分爲單詞。排序words.Use StringBuilder的追加排序的話,並創建分類string.Just看的Javadoc – Cratylus 2013-03-24 20:45:05

0
  1. 從來就沒有什麼理由罵new String(...)
  2. 標點符號是否重要?
  3. 重複單詞怎麼樣?
  4. 你想字符串進行排序的關心呢?你對「一個男人,一個計劃,一條運河,巴拿馬」有什麼期望? 「A Panama,a canal man,plan,」

調整Cratylus的答案,你可能會改變正則表達式爲\\W+。你會分裂成非字詞組成部分。然後,瞭解CollatorCollationKey。你可能想要不區分大小寫的搜索。或者,小寫的方式在字符串中。

+0

回答問題烏爾4號正是我想要你說。 – 2013-03-24 16:38:30