对String内的字符进行排序

时间:2015-05-14 00:35:07

标签: java

我尝试按字母顺序在字符串中对字符进行排序,当我使用以下示例运行我的代码时:hello,然后我得到:heeeeeeeeeheeeelheeellhee而不是ehllo 。 smb可以建议我在代码中应该修复什么吗?提前谢谢!

public static void main(String[] args)
    {
        String result = "";
        Scanner kbd = new Scanner(System.in);
        String input = kbd.nextLine();

        char[] myArray = input.toCharArray();

        for(int i = 0; i < myArray.length; i++)
            for(int j = 0; j < myArray.length; j++)
            {
                if(myArray[i] > myArray[j])
                {
                    char temp = myArray[j];
                    myArray[j] = myArray[i];
                    myArray[i] = temp;
                    result += myArray[i];
                }
                else 
                    result += myArray[i];
            }
        System.out.println(result);
    }

3 个答案:

答案 0 :(得分:1)

为什么这么复杂?

public String sortByChar(String s)
{
    char[] cs = s.toCharArray();
    Arrays.sort(cs);
    return new String(cs);
}

答案 1 :(得分:0)

随时随地修改result。这是错误的:result会在您修改字符时收集字符记录,这不是您想要的。

您应该从代码中删除result += ...,并在循环后使用它:

String result = new String(myArray);

答案 2 :(得分:0)

在循环的每次迭代中,将数组中SPUser处的字符追加到i,但数组尚未排序

循环将执行result循环,因此,对于5个字符的n * (n - 1),这将是String(或20)次迭代。

相反,对数组进行排序,然后根据其内容创建一个新的5 * (5 - 1) ...

String

另请注意,String input = "hello"; char[] myArray = input.toCharArray(); for (int i = 0; i < myArray.length; i++) { for (int j = 1; j < myArray.length; j++) { if (myArray[i] > myArray[j]) { char temp = myArray[j]; myArray[j] = myArray[i]; myArray[i] = temp; } } } System.out.println(new String(myArray)); 错误且应为for (int j = 0; j < myArray.length; j++) {,否则您将在同一位置比较相同的字符,这不是您想要做的...

更“准确”的冒泡排序可能看起来像......

for (int j = 1; j < myArray.length; j++) {