2013-03-24 70 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