在字符串中按字母顺序排序字符

时间:2015-05-12 18:57:30

标签: java arrays string sorting char

请问smb请按字母顺序解释String字符的排序过程?例如,如果我有String "hello",则输出应为"ehllo",但我的代码执行错误。

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

        for(int i = 1; i < input.length(); i++)
        {
            if(input.charAt(i-1) < input.charAt(i))
                result += input.charAt(i-1);
            //else 
            //  result += input.charAt(i);
        }
        System.out.println(result);
    }


}

9 个答案:

答案 0 :(得分:15)

你可以做以下事情 -

1。将您的字符串转换为char[]数组 2。使用Arrays.sort()对char数组进行排序

代码段:

String input = "hello";
char[] charArray = input.toCharArray();
Arrays.sort(charArray);
String sortedString = new String(charArray);
System.out.println(sortedString);  

或者如果你想使用for循环对数组进行排序(出于学习目的)你可以使用(但我认为第一个是最佳选择)以下代码片段 -

input="hello";
char[] charArray = input.toCharArray();
length = charArray.length();

for(int i=0;i<length;i++){
   for(int j=i+1;j<length;j++){
      if (charArray[j] < charArray[i]) {
          char temp = charArray[i];
          charArray[i]=arr[j];
          charArray[j]=temp;
      }
   }
}

答案 1 :(得分:7)

您可以使用Stream对Java 8中的String进行排序,如下所示:

String sortedString =
    Stream.of("hello".split(""))
    .sorted()
    .collect(Collectors.joining());

答案 2 :(得分:1)

在你的bucle从1开始,应该从零开始

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

答案 3 :(得分:1)

作为任务排序的下限为O(n * logn),n为要排序的元素数。这意味着如果您使用具有简单操作的单个循环,则无法保证正确排序。 排序中的一个关键因素是决定您要排序的内容。在这种情况下,按字母顺序排列,如果你将每个字符转换为字符,则等同于按升序排序,因为字母实际上只是一个数字,机器映射到字符,用&#39; a&#39; &LT; &#39; B&#39 ;.唯一需要注意的问题是大小写,因为&#39; z&#39; &LT; &#39; A&#39 ;.为了解决这个问题,您可以使用str.tolower()。我建议您也查找一些基本的排序算法。

答案 4 :(得分:1)

程序:

  1. 首先将字符串转换为字符数组

  2. 然后对角色数组进行排序

  3. 将字符数组转换为字符串

  4. 打印字符串

  5. 代码段:

     String input = "world";
     char[] arr = input.toCharArray();
     Arrays.sort(arr);
     String sorted = new String(arr);
     System.out.println(sorted);
    

答案 5 :(得分:0)

如果先将字符放入数组中,可以使用Arrays.sort执行此操作。

Character[] chars = new Character[str.length()];

for (int i = 0; i < chars.length; i++)
    chars[i] = str.charAt(i);

// sort the array
Arrays.sort(chars, new Comparator<Character>() {
    public int compare(Character c1, Character c2) {
        int cmp = Character.compare(
            Character.toLowerCase(c1.charValue()),
            Character.toLowerCase(c2.charValue())
        );
        if (cmp != 0) return cmp;
        return Character.compare(c1.charValue(), c2.charValue());
    }
});

现在使用StringBuilder从中构建一个字符串。

答案 6 :(得分:0)

//对混合字符串进行排序的方法

public static String sortString(String inputString) 
{ 
    // convert input string to Character array 

    Character tempArray[] = new Character[inputString.length()]; 

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

        tempArray[i] = inputString.charAt(i); 
    } 


    // Sort, ignoring case during sorting 
    Arrays.sort(tempArray, new Comparator<Character>(){ 

        @Override
        public int compare(Character c1, Character c2) 
        { 
            // ignoring case 
            return Character.compare(Character.toLowerCase(c1), 
                                    Character.toLowerCase(c2)); 
        } 
    }); 

    // using StringBuilder to convert Character array to String 
    StringBuilder sb = new StringBuilder(tempArray.length); 
    for (Character c : tempArray) 
        sb.append(c.charValue()); 

    return sb.toString(); 

答案 7 :(得分:0)

大多数基本方法和蛮力方法都使用两个for循环: 它对字符串进行排序,但代价是时间复杂度为O(n ^ 2)。

public void stringSort(String str){
        char[] token = str.toCharArray();
        for(int i = 0; i<token.length; i++){
            for(int j = i+1; j<token.length; j++){
                if(token[i] > token[j]){
                    char temp = token[i];
                    token[i] = token[j];
                    token[j] = temp;
                }
            }
        }
        System.out.print(Arrays.toString(token));
    }

答案 8 :(得分:-1)

公共类SortCharcterInString {

public static void main(String[] args) {
    String str = "Hello World";
    char[] arr;
    List<Character> L = new ArrayList<Character>();
    for (int i = 0; i < str.length(); i++) {
        arr = str.toLowerCase().toCharArray();
        L.add(arr[i]);

    }
    Collections.sort(L);
    str = L.toString();
    str = str.replaceAll("\\[", "").replaceAll("\\]", "")
            .replaceAll("[,]", "").replaceAll(" ", "");
    System.out.println(str);

}