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();
    }
}
4

3 に答える 3

5

なぜあなたはこれを難しくしているのですか?

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();  
于 2013-03-24T10:18:39.913 に答える
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="";
    }

永遠に続く。

于 2013-03-24T10:16:04.677 に答える
0
  1. 電話する理由はありませんnew String(...)
  2. 句読点は重要ですか?
  3. 繰り返される言葉はどうですか?
  4. 大文字と小文字を区別して文字列を並べ替えますか? 「男、計画、運河、パナマ」に何を期待しますか? 「パナマ。ああ運河の人、計画」

Cratylus の回答を適応させて、正規表現を に変更することができます\\W+。非単語構成要素の連続で分割することになります。そして、 と について学びCollatorますCollationKey。おそらく、大文字と小文字を区別しない検索が必要です。または、途中で文字列を小文字にします。

于 2013-03-24T10:28:38.803 に答える