有没有办法按字母顺序对java中的String进行排序而不将String放入数组?

时间:2017-07-01 01:38:13

标签: java arrays string char alphabet

在下面的代码中,我尝试将i处的char与i + 1处的char进行比较。我的理解是通过使用charAt():我可以从字符串中取出字符并将其视为整数,并能够比较两个字符。这部分代码可以工作,但我认为我在代码中遗漏了一些东西,因此它没有打印出所需的结果。除非这种对String中的字符进行排序的方式无效。

public class stringAlphabetical {

    public static void main(String[] args){
        String word="watch";
        boolean swapped;
        char temp = ' ';
        do{
            swapped = false;
            for(int i=0;i<word.length()-1;i++){
                char a = word.charAt(i);
                char b = word.charAt(i+1);

                if(word.charAt(i)>word.charAt(i+1)){   // if (a>b) {
                   temp = a;
                   a = b;
                   b = temp;
                }
            }


        }while (swapped==true);

        System.out.println(word);
    }
}

3 个答案:

答案 0 :(得分:2)

Java String 不可变,因此您需要使用可变类(如StringBuilder) - (另外,您正在修改char值,不是参考)并且您不需要t

StringBuilder word = new StringBuilder("watch");
boolean swapped;
do {
    swapped = false;
    for (int i = 0; i < word.length() - 1; i++) {
        char a = word.charAt(i), b = word.charAt(i + 1);

        if (a > b) { // <-- this is fine.
            word.setCharAt(i, b);
            word.setCharAt(i + 1, a);
            swapped = true;
        }
    }
} while (swapped);
System.out.println(word);

哪个输出

atchw

或者只使用一个数组(对于相同的结果)

String word = "watch";
char[] c = word.toCharArray();
Arrays.sort(c);
System.out.println(new String(c));

答案 1 :(得分:2)

使用此代码按字母顺序对String数组进行排序,而不存储在任何数组中

    Scanner kbd = new Scanner(System.in);
    String input = kbd.nextLine();
    String sortedString = Stream.of(input.split("")).sorted().collect(Collectors.joining());
    System.out.print(sortedString);

答案 2 :(得分:0)

要按字母顺序对字符串进行排序,您需要将每个字符与所有字符进行比较,如果条件满足,则交换字符。 这是使用多个循环显示的。最后我打印了char数组。

public static void main(String[] args){
        String watchString = "watch";
        int j;
        char temp;

        char[] chars = watchString.toCharArray();

        for (int i = 0; i <chars.length; i++) {

            for ( j = 0; j < chars.length; j++) {

                if(chars[j]>chars[i]){
                    temp=chars[i];
                    chars[i]=chars[j];
                    chars[j]=temp;
                }

            }

        }

        for(int k=0;k<chars.length;k++){
            System.out.print(chars[k]);
        }

    }