13

配列 (char 配列ではない) があり、Character配列内のすべての文字を組み合わせて文字列に変換したいと考えています。

特定の に対して次のことを試しましたCharacter[] a

String s = new String(a) //given that a is a Character array

ただし、 a は char 配列ではないため、これは機能しません。助けていただければ幸いです。

4

10 に答える 10

18
Character[] a = ...
new String(ArrayUtils.toPrimitive(a));

ArrayUtilsApacheCommonsLangの一部です。

于 2012-10-31T03:09:43.147 に答える
9

これを行う最も効率的な方法は、おそらく次のとおりです。

Character[] chars = ...

StringBuilder sb = new StringBuilder(chars.length);
for (Character c : chars)
    sb.append(c.charValue());

String str = sb.toString();

ノート:

  1. StringBuilder を使用すると、複数の中間文字列が作成されるのを回避できます。
  2. 初期サイズを指定すると、再割り当てが回避されます。
  3. 使用するcharValue()と呼び出しが回避されCharacter.toString()ます...

ただし、パフォーマンスが重大な問題でない限り、@ Torious のエレガントな回答を使用するでしょう。


ちなみに、JLS は、コンパイラが同等の StringBuilder コードを使用して String 連結式を最適化することを許可されていると述べていますが、複数のステートメントにまたがるその最適化は認めていません。したがって、次のようなもの:

    String s = ""
    for (Character c : chars) {
        s += c;
    }

多くの個別の連結を行い、多くの中間文字列を作成 (および破棄) する可能性があります。

于 2012-10-31T03:42:28.863 に答える
6

反復および連結アプローチ:

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

于 2012-10-31T03:08:52.900 に答える
3

おそらくやり過ぎですが、Java 8ではこれを行うことができます:

Character[] chars = {new Character('a'),new Character('b'),new Character('c')};

String value = Arrays.stream(chars)
                .map(Object::toString)
                .collect( Collectors.joining() );
于 2016-03-23T21:22:35.300 に答える
3

最初に を に変換し、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);
于 2012-10-31T03:12:50.183 に答える
3

おそらく遅いですが、キックのために、ここに他のアプローチとは異なる醜いワンライナーがあります-

Arrays.toString(characterArray).replaceAll(", ", "").substring(1, characterArray.length + 1);
于 2012-10-31T03:29:04.130 に答える
2

各インデックスで、toStringメソッドを呼び出し、結果をStringに連結します。

于 2012-10-31T03:11:03.953 に答える
2

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;
} 
于 2012-10-31T03:16:33.160 に答える
0
int length = cArray.length;
String val="";
for (int i = 0; i < length; i++)
    val += cArray[i];
System.out.println("String:\t"+val);
于 2013-08-03T08:53:42.680 に答える