web-dev-qa-db-ja.com

文字列内の文字をアルファベット順に並べ替える

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


}
3
user4833678

あなたは次のことをするかもしれません-

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;
      }
   }
}
_
14
Razib

次のようにStreamを使用して、文字列をJava 8でソートできます。

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

手順:

  1. 最初に文字列をchar配列に変換します

  2. 次に、文字の配列を並べ替えます

  3. 文字配列を文字列に変換します

  4. 文字列を印刷する


コードスニペット:

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

タスクとしての並べ替えにはO(n * logn)の下限があり、nは並べ替える要素の数です。つまり、単純な操作で単一のループを使用している場合、正しくソートされることが保証されません。並べ替えの重要な要素は、何で並べ替えるかを決定することです。この場合、アルファベット順で、各文字をcharに変換すると、昇順で並べ替えることになります。これは、charは実際には、マシンが文字にマップする単なる数値であり、「a」<「b」であるためです。 「z」<「A」なので、注意すべき唯一の問題は大文字と小文字が混在することです。これを回避するには、str.tolower()を使用できます。基本的なソートアルゴリズムも調べることをお勧めします。

1
GreySage

あなたのfor bucleは1から始まり、ゼロから始まる必要があります

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

public class Alphabets {public void disp(String str){int i、j、p; char chr; p = str.length(); for(i = 65; i <= 90; i ++){for(j = 0; j

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(); 
0
pramodgautam

2つの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));
    }
0
user3133925

最初に文字を配列に入れる場合は、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を使用して文字列を作成します。

0
user8383675