在java中将角色从一个地方移动到另一个地方

时间:2014-08-03 09:43:45

标签: java arrays string

我正在编写一个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

2 个答案:

答案 0 :(得分:0)

在尝试查找错误之前,您应该简化代码。一旦简化,它将更容易。我建议你:

  • 将for while(true)+ break替换为do {} while(condition)以获取代码可读性
  • 使用myString.split('')来计算句子中的单词
  • 在myString.split('')的结果上使用Arrays.sort按字母顺序对单词进行排序
  • 在cse_Convert中为变量h使用StringBuilder而不是String作为性能

答案 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;如果它存在,它到底。