#はじめに:
##やりたいこと
文字列 (String) をソートしたい。
・ "627118" -> (昇順) -> "112678"
・ "627118" -> (降順) -> "876211"
・ "Hello World" -> (昇順) -> " HWdellloor"
・ "Hello World" -> (降順) -> "roollledWH "
#考察
昇順ソート
・これはすんなりいった。「やったこと」 の"StringSortAsc"を参照ください。
String => char[] => Arrays.sort() => New String()
降順ソート
・一旦 String を char [] にして
// char 配列に変換
char[] charArr = str.toCharArray();
・Arrays.sort の第2引数に Collections.reverseOrder() を渡す
import java.util.Collections;
...
Arrays.sort(charArr, Collections.reverseOrder());
・Error!!
// Main.java:10: error: no suitable method found for sort(char[],Comparator<Object>)
#やったこと
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println(StringSortAsc("627118"));
System.out.println(StringSortDesc("627118"));
System.out.println(StringSortAsc("Hello, World"));
System.out.println(StringSortDesc("Hello, World"));
}
/**
* @param str String value to asc-sort
* @return String sorted in ascending order
* String の昇順ソート
*/
private static String StringSortAsc (String str) {
// char 配列に変換
char[] charArr = str.toCharArray();
// Arrays の sort APIを使ってソート
Arrays.sort(charArr);
// charArr から Stringに再変換
return new String(charArr);
}
/**
* @param str String value to desc-sort
* @return String sorted in descending order
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuilder.html#reverse()
* String の降順ソート
*/
private static String StringSortDesc (String str) {
// 一旦昇順にソート
String sortedStr = StringSortAsc(str);
StringBuilder sb = new StringBuilder(sortedStr);
sb.reverse();
return sb.toString();
}
}
##結果
112678
876211
HWdellloor
roollledWH
#終わりに
StringBuilder 使いましたがもっと早い方法があればコメントください。ありがとうございました。