按字母顺序排列给定字符串中的单词

时间:2013-03-24 10:14:13

标签: java

我只是想编写一个代码,用于按字母顺序排列字符串中的单词。 但每当我运行它时,它“进入一个无限循环......我无法弄清楚究竟发生了什么......我可以帮助我解决问题......下面我附上了我的代码。

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

3 个答案:

答案 0 :(得分: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();  

答案 1 :(得分: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="";
    }

永远。

答案 2 :(得分:0)

  1. 没有任何理由可以致电new String(...)
  2. 标点符号是否重要?
  3. 重复的话怎么样?
  4. 您是否希望字符串对案例进行排序?你对“一个男人,一个计划,一条运河,巴拿马”有什么期望? “巴拿马。一个运河人,计划,”
  5. 调整Cratylus的答案,您可以将正则表达式更改为\\W+。你会分裂非单词成分。然后,了解CollatorCollationKey。您可能需要不区分大小写的搜索。或者,在路上小写字符串。