簡體   English   中英

按字母順序對字符串中的字符進行排序

[英]Sorting characters alphabetically in a String

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


}

你可以做以下事情——

1.將您的 String 轉換為char[]數組。
2.使用Arrays.sort()對你的字符數組進行排序

代碼片段:

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

您可以使用 Stream 對 Java 8 中的字符串進行排序,如下所示:

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

程序 :

  1. 首先將字符串轉換為字符數組

  2. 然后對字符數組進行排序

  3. 將字符數組轉換為字符串

  4. 打印字符串


代碼片段:

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

在你的 for bucle 從 1 開始,應該從零開始

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

作為任務排序的下限為 O(n*logn),n 是要排序的元素數。 這意味着如果您使用具有簡單操作的單個循環,則不能保證正確排序。 排序中的一個關鍵要素是決定您排序的依據。 在這種情況下,它按字母順序排列,如果將每個字符轉換為字符,則相當於按升序排序,因為字符實際上只是機器映射到字符的數字,其中 'a' < 'b'。 唯一需要注意的問題是大小寫混合,因為 'z' < 'A'。 為了解決這個問題,您可以使用str.tolower() 我建議您也查找一些基本的排序算法。

如果您先將字符放入數組,則可以使用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從中構建一個字符串。

使用兩個 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));
    }

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM