我正在编写一个java程序,我必须接受一个字符串并在必要时对String的单词进行排序,并显示排序字符串的输出,包括应该位于最后位置的句号。 我的代码如下:
import java.util.Scanner;
class Stringop
{
static String txt;
void readString()//to accept the string
{
Scanner in=new Scanner(System.in);
while(true)//to accept the string unless the string ends with a full stop '.'
{
System.out.print("Enter a Sentence:>");
txt=in.nextLine();
int lt=txt.length();
if(txt.charAt(lt-1)=='.')
{
break;
}
}
}
public static void main(String args[])
{
Stringop ob=new Stringop();
Scanner in=new Scanner(System.in);
int w=1;//for continuous choice loop generarion
while(true)
{
if(w==1)
{
ob.readString();
String st=ob.sort(txt);
String h=ob.cse_Convert(st);
ob.display(h);
}
System.out.print("\n To Continue Press 1 else press 0");
System.out.print("\n Do you want to Continue:");
w=in.nextInt();
if(w==0)
{
break;
}
}
}
String sort(String g)//Sorting of string alphabetically
{
g=g+" ";//giving a extra space to the string which helps in finding no. of words
int c=0,k=0;String a="",st="",p="";
for(int i=0;i<g.length();i++)
{
if(g.charAt(i)==' ')
{
c++;//acting as a counter to count the no. of spaces=no. of words.
}
}
String s[]=new String[c];
for(int i=0;i<g.length();i++)
{
if(g.charAt(i)!=' '&&g.charAt(i)!='.')
{
a=a+g.charAt(i);
}
else if(g.charAt(i)==' '&&g.charAt(i)!='.')
{
s[k]=a;//Stroring of the words in array
k++;//acts as an index value for the array
a="";//re-initializes the String a to null.
}
else if(g.charAt(i)=='.')
{
s[k]=a+g.charAt(i);
}
}
for(int i=0;i<c-1;i++)
{
for(int j=0;j<c-1-i;j++)
{
if((s[j].compareTo(s[j+1]))>0)
{
p=s[j];
s[j]=s[j+1];
s[j+1]=p;
}
}
}
for(int i=0;i<c;i++)
{
st=st+s[i]+" ";
}
return st;
}
public String cse_Convert(String g)//for Case conversion
{
String h="",p="";
for(int i=0;i<g.length();i++)
{
char s=g.charAt(i);
if(s>=65&&s<=90)
{
int a=(int)s+32;
char t=(char)a;
h=h+t;
}
else if(s>=97&&s<=122)
{
int a=(int)s-32;
char t=(char)a;
h=h+t;
}
else if(s==' ')
{
h=h+" ";
}
else if(s=='.')
{
h=h+s;
}
else
{
h=h+s;
}
}
return h;
}
void display(String y)//displaying the sorted string
{
System.out.print("New String:>"+y);
}
}
但这不会影响,因为我的输出是这样的:
输入句子:&gt;我们是印第安人。 新字符串:&gt; iNDIANS是谁 要继续按1,否则按0 要继续:0
但我想要输出像这样: 输入句子:&gt;我们是印第安人。 新字符串:&gt; iNDIANS是谁。 要继续按1,否则按0 要继续:0
答案 0 :(得分:0)
在尝试查找错误之前,您应该简化代码。一旦简化,它将更容易。我建议你:
答案 1 :(得分:0)
您似乎有很多代码。这么多,你无法说出发生了什么。
这几行足以完成工作:
String input = in.readLine();
List<String> words = new ArrayList<String>(Arrays.asList(input.split("\\s+|(?=\\.)")));
Collections.sort(words);
String ordered = words.toString().replaceAll("\\[|\\]|,", "").replacrAll("^\\.( .*)", "$0.");
完整停止处理,但明确地将其拆分,因为它将首先排序,自定义代码到&#34;移动&#34;如果它存在,它到底。 p>