我只是想编写一个代码,用于按字母顺序排列字符串中的单词。 但每当我运行它时,它“进入一个无限循环......我无法弄清楚究竟发生了什么......我可以帮助我解决问题......下面我附上了我的代码。
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 :(得分: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)
new String(...)
。调整Cratylus的答案,您可以将正则表达式更改为\\W+
。你会分裂非单词成分。然后,了解Collator
和CollationKey
。您可能需要不区分大小写的搜索。或者,在路上小写字符串。