2016-04-09 4 views
0

次のコードが動作しないのはなぜですか?次のコードで何が問題になります

String s = "fecbda"; 
Arrays.sort(s.toCharArray()); 
System.out.println(s); 
+0

http://stackoverflow.com/q/36510808/3973077 –

+1

どうしたのですか? – Sevle

+2

"*デバッグのヘルプを求める質問(「なぜこのコードは動作しませんか?」)には、必要な動作、特定の問題またはエラー**、およびその問題自体の中でそれを再現するのに必要な最短のコードです。明確な問題文がない質問は他の読者には役に立たない* " - [私はここでどのような話題を聞くことができますか?](http://stackoverflow.com/help/on-トピック) –

答えて

2

文字列は変更できないため、変更できません。これは何もするとは思わないはずです。あなたが意図している場合がありますどのような

は、それが動作しません

String s = "fecbda"; 
char[] chars = s.toCharArray(); 
Arrays.sort(chars); 
String s2 = new String(chars); 
System.out.println(s2); 
+0

'chars'を直接印刷できます。 's2'を作成する必要はありません。 – Andreas

+1

完全な回答を得るには、['toCharArray()'](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray%28%29)のjavadocを引用してください: *新しく割り当てられた**文字配列を返す* – Andreas

+0

@Andreas 'System.out.println(chars)'を使うことはできませんが、 'System.out.println(Arrays.toString(chars))'を使うことができます。私はOPが期待していたものではないと思う。 –

1

ですs.toCharArray()として:

戻り値: 長さはこの文字列の長さと内容は、新しく割り当てられた文字列この文字列で表される文字シーケンスを含むように初期化されています。

ドキュメントの操作部分は、それが(文字列内の文字のすなわちコピー)新しい配列を作成し、その配列を並べ替えるときに、文字列をソートしていないということです。それは不変であるとしてあなたは、文字列を並べ替えることはできませんが、あなたがこのようなソートされた文字列から新しい文字列を作ることができ

:別の方法として、

String s = "fecbda"; 
char[] c = s.toCharArray(); 
Array.sort(c); 
String n = new String(c); 

、あなたはストリームを使用してJava 8でそれを行うことができます:

String s = "fecbda"; 

String n = s.chars() // Convert to an IntStream of character codes 
      .sorted() // Sort 
      .mapToObj(i -> Character.toString((char) i)) // Convert to strings 
      .collect(Collectors.joining()); // Concatenate the strings. 
関連する問題