Javaで文字列を「文字」配列に変換する


108

CharacterクラスStringのオブジェクトの配列に変換したいのですが、変換できません。メソッドで文字列をプリミティブデータ型の「char」の配列に変換できることは知っていますが、文字列を文字型のオブジェクトの配列に変換するのには役立ちません。toCharArray()

どうすればそうなりますか?


6
「文字配列に適合しない」とはどういう意味ですか?
barsju

これを言い換えたり、もう少し明確にしたり、コード例を提供したりできますか?
blackcompe 2012

に変換するcharにはCharacter、を使用しますCharacter.valueOf(mychar)。配列の場合は、各要素をループして変換します。
ええ。

javaにはマップ関数、ラムダ式が必要です。
Eric Hartford

回答:


184

これを使って:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);

27
ArrayUtilsがJVMの標準であることを願っています!
アルヴィン

4
ArrayUtilscommons-langJDKではなくからですよね?
Eric Wang

66

ライナー付き

String str = "testString";

//[t, e, s, t, S, t, r, i, n, g]
Character[] charObjectArray = 
    str.chars().mapToObj(c -> (char)c).toArray(Character[]::new); 

それは何ですか:

  • IntStreamキャラクターのを取得します(も参照したい場合がありますcodePoints()
  • それぞれの「文字」値をマッピングしCharacterます(実際にそれが本当にであることをキャストする必要があります。charそうすると、Javaによって自動的にボックス化されますCharacter
  • 呼び出して結果の配列を取得する toArray()

33

自分で少しメソッドを書いてみませんか

public Character[] toCharacterArray( String s ) {

   if ( s == null ) {
     return null;
   }

   int len = s.length();
   Character[] array = new Character[len];
   for (int i = 0; i < len ; i++) {
      /* 
      Character(char) is deprecated since Java SE 9 & JDK 9
      Link: https://docs.oracle.com/javase/9/docs/api/java/lang/Character.html
      array[i] = new Character(s.charAt(i));
      */
      array[i] = s.charAt(i);
   }

   return array;
}

文字列が巨大な場合、インスタンス化される文字オブジェクトが多すぎます。
realPK 2016年

2
少しメソッドを書いてみませんか?メソッドがすでに存在するため(toCharArray())、すでに存在するメソッドには、その関数のパフォーマンスと信頼性を保証することに専念し、関心があるエンジニアが、stackoverflowポストからコピー/貼り付けされるものよりもはるかに多くなっています。
HoldOffHunger 2016

1
@HoldOffHungerあなたは絶対に正しいです。ただし、toCharArray()は、OPの必要に応じて、Characterオブジェクトではなくプリミティブ型の配列を返します。確かに、char []を再びループしてCharacter []に変換できます。しかし、文字オブジェクトを作成して文字オブジェクトを作成するループは非常に簡単なので、サードパーティのライブラリを持ち込みたくない場合は、なぜ自分でロールしないのかわかりません。
Alvin

6

以下のコードがお役に立てば幸いです。

String s="Welcome to Java Programming";
char arr[]=s.toCharArray();
for(int i=0;i<arr.length;i++){
    System.out.println("Data at ["+i+"]="+arr[i]);
}

動作しており、出力は次のとおりです。

Data at [0]=W
Data at [1]=e
Data at [2]=l
Data at [3]=c
Data at [4]=o
Data at [5]=m
Data at [6]=e
Data at [7]= 
Data at [8]=t
Data at [9]=o
Data at [10]= 
Data at [11]=J
Data at [12]=a
Data at [13]=v
Data at [14]=a
Data at [15]= 
Data at [16]=P
Data at [17]=r
Data at [18]=o
Data at [19]=g
Data at [20]=r
Data at [21]=a
Data at [22]=m
Data at [23]=m
Data at [24]=i
Data at [25]=n
Data at [26]=g

4
これは、OPが求めていたものとはまったく異なります。
Qix-モニカは2014年

3

String#toCharArrayの配列を返します。char持っているのはの配列ですCharacter。ほとんどの場合、使用するcharCharacterオートボクシングがあるかは問題ではありません。あなたの場合の問題は、配列がオートボックス化されていないことです。char(char[])の配列を使用することをお勧めします。


2

この場合、独自のメソッドを作成する必要があります。ループを使用して各文字を取得charAt(i)し、Character[]を使用して配列に設定しますarrayname[i] = string.charAt[i]


2

このメソッドは、引数として文字列を取り、文字配列を返します

/**
 * @param sourceString
 *            :String as argument
 * @return CharcterArray
 */
public static Character[] toCharacterArray(String sourceString) {
    char[] charArrays = new char[sourceString.length()];
    charArrays = sourceString.toCharArray();
    Character[] characterArray = new Character[charArrays.length];
    for (int i = 0; i < charArrays.length; i++) {
        characterArray[i] = charArrays[i];
    }
    return characterArray;
}

1

それを行う別の方法。

String str="I am a good boy";
    char[] chars=str.toCharArray();

    Character[] characters=new Character[chars.length];
    for (int i = 0; i < chars.length; i++) {
        characters[i]=chars[i];
        System.out.println(chars[i]);
    }

1

文字列を文字配列に変換してから文字配列を文字列に戻す

   //Givent String
   String given = "asdcbsdcagfsdbgdfanfghbsfdab";

   //Converting String to Character Array(It's an inbuild method of a String)
   char[] characterArray = given.toCharArray();
   //returns = [a, s, d, c, b, s, d, c, a, g, f, s, d, b, g, d, f, a, n, f, g, h, b, s, f, d, a, b]

//一方向:文字配列を文字列に変換

  int length = Arrays.toString(characterArray).replaceAll("[, ]","").length();

  //First Way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").substring(1,length-1)
  //returns asdcbsdcagfsdbgdfanfghbsfdab
  or 
  // Second way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").replace("[","").replace("]",""))
 //returns asdcbsdcagfsdbgdfanfghbsfdab

// 2番目の方法:文字配列を文字列に戻す

String.valueOf(characterArray);

// Third WAY:文字配列を文字列に戻す

Arrays.stream(characterArray)
           .mapToObj(i -> (char)i)
           .collect(Collectors.joining());

文字列を文字配列に変換する

Character[] charObjectArray =
                           givenString.chars().
                               mapToObj(c -> (char)c).
                               toArray(Character[]::new);

文字配列を文字配列に変換する

 String givenString = "MyNameIsArpan";
char[] givenchararray = givenString.toCharArray();


     String.valueOf(givenchararray).chars().mapToObj(c -> 
                         (char)c).toArray(Character[]::new);

char配列をCharacter配列に変換する利点は、Arrays.stream関数を使用してサブ配列を取得できることです。

String subStringFromCharacterArray = 

              Arrays.stream(charObjectArray,2,6).
                          map(String::valueOf).
                          collect(Collectors.joining());

0

JTextFieldを使用している場合は、役立ちます。

public JTextField display;
String number=e.getActionCommand();

display.setText(display.getText()+number);

ch=number.toCharArray();
for( int i=0; i<ch.length; i++)
    System.out.println("in array a1= "+ch[i]);


0

サードパーティのAPIに依存したくない場合は、JDK7以下の動作するコードを以下に示します。上記の他のソリューションのように、一時的なキャラクターオブジェクトをインスタンス化していません。foreachループの方が読みやすいです。自分で確認してください:)

public static Character[] convertStringToCharacterArray(String str) {
    if (str == null || str.isEmpty()) {
        return null;
    }
    char[] c = str.toCharArray();
    final int len = c.length;
    int counter = 0;
    final Character[] result = new Character[len];
    while (len > counter) {
        for (char ch : c) {
            result[counter++] = ch;
        }
    }
    return result;
}

0

java.ioStringReaderクラスを使用しました。その関数の1つは、文字列の内容を配列に読み込みます。read(char[] cbuf)

String str = "hello";
char[] array = new char[str.length()];
StringReader read = new StringReader(str);

try {
    read.read(array); //Reads string into the array. Throws IOException
} catch (IOException e) {
    e.printStackTrace();
}

for (int i = 0; i < str.length(); i++) {
        System.out.println("array["+i+"] = "+array[i]);
}

これを実行すると、出力が得られます。

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.