配列 (char 配列ではない) があり、Character
配列内のすべての文字を組み合わせて文字列に変換したいと考えています。
特定の に対して次のことを試しましたCharacter[] a
:
String s = new String(a) //given that a is a Character array
ただし、 a は char 配列ではないため、これは機能しません。助けていただければ幸いです。
Character[] a = ...
new String(ArrayUtils.toPrimitive(a));
ArrayUtils
ApacheCommonsLangの一部です。
これを行う最も効率的な方法は、おそらく次のとおりです。
Character[] chars = ...
StringBuilder sb = new StringBuilder(chars.length);
for (Character c : chars)
sb.append(c.charValue());
String str = sb.toString();
ノート:
charValue()
と呼び出しが回避されCharacter.toString()
ます...ただし、パフォーマンスが重大な問題でない限り、@ Torious のエレガントな回答を使用するでしょう。
ちなみに、JLS は、コンパイラが同等の StringBuilder コードを使用して String 連結式を最適化することを許可されていると述べていますが、複数のステートメントにまたがるその最適化は認めていません。したがって、次のようなもの:
String s = ""
for (Character c : chars) {
s += c;
}
多くの個別の連結を行い、多くの中間文字列を作成 (および破棄) する可能性があります。
反復および連結アプローチ:
Character[] chars = {new Character('a'),new Character('b'),new Character('c')};
StringBuilder builder = new StringBuilder();
for (Character c : chars)
builder.append(c);
System.out.println(builder.toString());
出力:
abc
おそらくやり過ぎですが、Java 8ではこれを行うことができます:
Character[] chars = {new Character('a'),new Character('b'),new Character('c')};
String value = Arrays.stream(chars)
.map(Object::toString)
.collect( Collectors.joining() );
最初に を に変換し、Character[]
以下のように文字列を取得するためにchar[]
使用します。String.valueOf(char[])
char[] a1 = new char[a.length];
for(int i=0; i<a.length; i++) {
a1[i] = a[i].charValue();
}
String text = String.valueOf(a1);
System.out.println(text);
おそらく遅いですが、キックのために、ここに他のアプローチとは異なる醜いワンライナーがあります-
Arrays.toString(characterArray).replaceAll(", ", "").substring(1, characterArray.length + 1);
各インデックスで、toStringメソッドを呼び出し、結果をStringに連結します。
Character 配列のリストを反復処理し、各値を新しい文字列に追加する独自のメソッドを作成するのはどうですか。
このようなもの。
public String convertToString(Character[] s) {
String value;
if (s == null) {
return null;
}
Int length = s.length();
for (int i = 0; i < length; i++) {
value += s[i];
}
return value;
}
int length = cArray.length;
String val="";
for (int i = 0; i < length; i++)
val += cArray[i];
System.out.println("String:\t"+val);