【问题标题】:Sorting characters alphabetically in a String在字符串中按字母顺序对字符进行排序
【发布时间】:2015-07-23 19:47:38
【问题描述】:

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);
    }


}

【问题讨论】:

  • 你的 if 语句中的比较,你能解释一下你认为它在做什么吗?
  • 不要说您的代码“做错了”,而应该编辑您的问题以给出您遇到的特定问题。例如,您可以给出一个示例输入、预期输出以及您获得的实际输出。
  • 我想你只需要看看:en.wikipedia.org/wiki/Bubble_sort

标签: java arrays string sorting char


【解决方案1】:

你可以做以下事情-

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

代码 sn-p:

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

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

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;
      }
   }
}

【讨论】:

  • 第二个不是和冒泡排序一样吗?​​
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    作为任务排序的下限为 O(n*logn),其中 n 是要排序的元素数。这意味着如果您使用具有简单操作的单个循环,则不能保证正确排序。 排序中的一个关键要素是决定您的排序依据。在这种情况下,它按字母顺序排列,如果将每个字符转换为 char,则相当于按升序排序,因为 char 实际上只是机器映射到字符的数字,'a' str.tolower()。我建议您也查找一些基本的排序算法。

    【讨论】:

      【解决方案4】:

      程序:

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

      2. 然后对字符数组进行排序

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

      4. 打印字符串


      代码sn-p:

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

      【讨论】:

        【解决方案5】:

        您可以在 Java 8 中使用 Stream 对字符串进行排序,如下所示:

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

        【讨论】:

          【解决方案6】:

          如果您先将字符放入数组中,则可以使用 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 从它构建一个字符串。

          【讨论】:

            【解决方案7】:

            使用两个 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】:

              公共类 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);
              
              }
              

              【讨论】:

              • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
              猜你喜欢
              • 1970-01-01
              • 2012-03-16
              • 2017-10-04
              • 2016-12-05
              • 2018-11-20
              • 2021-05-08
              • 1970-01-01
              • 1970-01-01
              • 2013-09-04
              相关资源
              最近更新 更多