はじめに:
文字列内のすべての文字をアルファベット順に並べ替える必要がある場合があります。StringはJavaでは不変であるため、別の文字列変数が作成されます。たとえば、文字列「albert」は、並べ替え後に「abelrt」になります。このJavaの例では、文字列の文字をさまざまな方法でアルファベット順に並べ替える方法を学習します。
見てみましょう:
ループを使用する:
ソートの基本的な方法は、ループを使用することです。2つのforループを使用し、両方がもう一方の内部で実行されます。外側のループは文字列の左側から1つずつ選択し、内側のループはそれを文字列の左側にある他のすべての要素と比較します。内側のループが小さい要素が見つかった場合は、外側のループが指す要素と交換します。コードでアルゴリズムを示しましょう:
import java.util.Arrays;
import java.util.Scanner;
class Main { public static void main(String [] args){ // 1 スキャナーscanner = new Scanner(System.in);
// 2
System.out.println( "文字列を入力してください:");
文字列userInput = Scanner.nextLine();
// 3
char [] charArray = userInput.toCharArray();
// 4
for(int i = 0; i <charArray.length; i ++){ for(int j = i + 1; j <charArray.length; j ++){ if(Character.toLowerCase(charArray [j])<Character .toLowerCase(charArray [i])){ swapChars(i、j、charArray); } } }
// 6
System.out.println( "ソートされた文字列" + String.valueOf(charArray));
}
// 5つの
privatestatic void swapChars(int i、int j、char [] charArray){ char temp = charArray [i]; charArray [i] = charArray [j]; charArray [j] = temp; }
}
説明:
1.ユーザーの入力値を読み取るためにスキャナオブジェクトを作成します。
2.ユーザーに文字列の入力を求めます。それを読み取り、userInput変数に格納します。
3.この文字列の各文字を比較し、スワップして昇順で配置する予定です。文字列は不変であるため、最初に文字列値を配列に変換する必要があります。このために、toCharArray()を使用して文字配列を返します。
4.次に、ネストされた2つのforループを使用して、配列の内容を並べ替えます。ここでは、大文字と小文字のASCII値が異なるため、2つの文字を比較する前に、それらを小文字に変換します。
5. swapChars関数は、配列内の2文字を交換するために使用されます。配列内の文字の位置を入力として受け取ります。
6.最後に、ソートされた文字列をユーザーに出力します。
出力例:
文字列を入力してください:
アルファベット
ソートされた文字列Aabehlpt
文字列を入力してください:
elephant
並べ替えられた文字列aeehlnpt
は循環並べ替えを使用しません:
2つのforループを使用することに加えて、次のように文字配列を直接並べ替えることもできます。importjava.util.Arrays
;
import java.util.Scanner;
クラスMain { public static void main(String [] args){ スキャナースキャナー=新しいスキャナー(System.in);
System.out.println( "文字列を入力してください:");
文字列userInput = Scanner.nextLine();
char [] charArray = userInput.toCharArray();
Arrays.sort(charArray);
System.out.println( "Sorted string" + String.valueOf(charArray));
}
}
このメソッドの唯一の問題は、大文字と小文字の両方を含む文字列を並べ替えることができないことです。文字。文字列が大文字または小文字のみの場合は機能します。
例:
象の
並べ替えられた文字列Eaehlnpt
文字列を入力してください:
象
ソートされた文字列aeehlnpt
文字列を入力します:
ELEPHANT
ソート列AEEHLNPT
使用して、コンパレータを:
次のように我々はすべて大文字と小文字を比較するために、上記のプログラムを向上させることができます
インポートjava.util.Arraysを、
輸入はjava.util.Comparator;
インポートjava.util.Scanner;
クラスMain { public static void main(String [] args){ スキャナースキャナー=新しいスキャナー(System.in);
System.out.println( "文字列を入力してください:");
文字列userInput = Scanner.nextLine();
// 1
Character [] charArray = new Character [userInput.length()];
for(int i = 0; i <userInput.length(); i ++){ charArray [i] = userInput.charAt(i); }
// 2
Arrays.sort(charArray、Comparator.comparingInt(Character :: toLowerCase));
StringBuilder sb = new StringBuilder(charArray.length);
for(Character c:charArray)
sb.append(c.charValue());
System.out.println( "ソートされた文字列" + sb.toString());
}
}
1.最初に、文字列から文字配列を作成します。
2.次に、ラムダを渡して、2番目のパラメーターの文字を比較しました。
lamdaは実際には次のようになります。Arrays.sort(charArray、new Comparator(){
@Override
public int compare(Character o1、Character o2){ return Character.compare(Character.toLowerCase(o1)、 Character.toLowerCase(o2)); } });最後に、StringBuilderを使用して配列を文字列に変換します。期待通りにキャラクターを配置します。例:文字列を入力します:Elephantソートされた文字列aEehlnptはJavaストリームを使用します:Java 8 Stream APIは、この問題を解決するための美しい方法を提供します。import java.util.Comparator; import java.util.Scanner; import java.util.stream.Collectors; import java.util.stream.Stream;
クラスMain { public static void main(String [] args){ スキャナースキャナー=新しいスキャナー(System.in);
System.out.println( "文字列を入力してください:");
文字列userInput = Scanner.nextLine();
String finalString =
Stream.of(userInput.split( ""))。
sorted(Comparator.comparingInt(o-> Character.toLowerCase(o.charAt(0))))。
collect(Collectors.joining());
System.out.println( "Sorted string" + finalString);
}
}
ここでは、sorted()メソッドで上記と同じコンパレータを使用します。それは次のような出力が得られます:
文字列を入力します:
象の
ソート列aEehlnptの
結論:
ではJavaは、私たちは、文字列でソート文字に4つの異なる方法を見てきました。実際、2番目の方法と3番目の方法は同じです。2番目の代わりに3番目のものを使用して、すべての大文字と小文字をサポートできます。どの方法を使用するかは、要件によって異なります。