Mengubah String menjadi array "Karakter" di Java


108

Saya ingin mengonversi menjadi Stringarray objek kelas Karakter tetapi saya tidak dapat melakukan konversi. Saya tahu bahwa saya dapat mengubah String menjadi array tipe data primitif "char" dengan toCharArray()metode tetapi tidak membantu dalam mengubah String menjadi array objek tipe Karakter .

Bagaimana saya akan melakukannya?


6
Apa yang Anda maksud dengan "tidak sesuai dengan larik karakter"?
Barsju

Dapatkah Anda mengucapkan ulang ini atau mengartikulasikan sedikit lebih banyak, atau mungkin memberikan contoh kode?
blackcompe

Untuk mengonversi charke Character, gunakan Character.valueOf(mychar). Jika itu adalah sebuah array, ulangi setiap elemen dan konversikan.
ee.

java membutuhkan fungsi peta, ekspresi lambda.
Eric Hartford

Jawaban:


184

Gunakan ini:

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

27
Saya berharap ArrayUtils adalah standar di JVM!
Alvin

4
ArrayUtilsdari commons-lang, bukan JDK, kan?
Eric Wang

66

Satu kapal dengan :

String str = "testString";

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

Apa yang dilakukannya adalah:

  • dapatkan salah IntStreamsatu karakter (Anda mungkin ingin juga melihat codePoints())
  • memetakan setiap nilai 'karakter' ke Character(Anda perlu mentransmisikan untuk benar-benar mengatakan bahwa itu benar-benar a char, dan kemudian Java akan mengotakkannya secara otomatis ke Character)
  • dapatkan array yang dihasilkan dengan memanggil toArray()

33

Mengapa tidak menulis sedikit metode sendiri

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;
}

Terlalu banyak Objek Karakter yang akan dibuat jika itu adalah String yang sangat besar.
realPK

2
Mengapa tidak menulis sedikit metode sendiri? Karena metode sudah ada (toCharArray ()), dan metode yang sudah ada memiliki lebih banyak insinyur yang berdedikasi dan tertarik untuk menjamin kinerja dan keandalan fungsi itu, daripada yang mungkin disalin / ditempel dari pos stackoverflow.
HoldOffHunger

1
@HoldOffHunger Anda benar sekali. Namun toCharArray () mengembalikan tipe primitif dari array, bukan objek Character seperti yang dibutuhkan oleh OP. Tentu, Anda dapat mengulang melalui karakter [] lagi untuk mengubahnya menjadi Karakter []. Tapi, mengulang melalui iklan string yang membuat objek Character sangat sederhana. Saya tidak mengerti mengapa tidak menggulung milik Anda sendiri jika Anda tidak ingin membawa perpustakaan pihak ketiga.
Alvin

6

Saya harap kode di bawah ini akan membantu Anda.

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]);
}

Ini berfungsi dan hasilnya adalah:

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
Ini sama sekali bukan yang diminta OP.
Qix - MONICA DISALAHKAN

3

String#toCharArraymengembalikan sebuah array char, yang Anda miliki adalah sebuah array Character. Dalam kebanyakan kasus, tidak masalah jika Anda menggunakan charatau Characterkarena ada autoboxing . Masalah dalam kasus Anda adalah bahwa array tidak di-autobox, saya sarankan Anda menggunakan array dari char ( char[]).


2

Anda harus menulis metode Anda sendiri dalam kasus ini. Gunakan loop dan dapatkan setiap karakter menggunakan charAt(i)dan setel ke Character[]array Anda menggunakan arrayname[i] = string.charAt[i].


2

Metode ini mengambil String sebagai argumen dan mengembalikan Array Karakter

/**
 * @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

cara lain untuk melakukannya.

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

Mengubah String menjadi Array Karakter dan kemudian Mengubah array Karakter kembali ke String

   //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]

// ONE WAY: Mengonversi kembali array Karakter ke String

  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

// CARA Kedua: Mengonversi kembali array Karakter ke String

String.valueOf(characterArray);

// CARA Ketiga: Mengonversi kembali array Karakter ke String

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

Mengonversi string ke Array Karakter

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

Mengubah array karakter menjadi Array Karakter

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


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

Manfaat Mengkonversi Array karakter ke Array Karakter Anda dapat menggunakan funtion Arrays.stream untuk mendapatkan sub array

String subStringFromCharacterArray = 

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

0

jika Anda bekerja dengan JTextField maka itu dapat membantu ..

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

rantai selalu yang terbaik: D

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());

1
chaining is always bestSalah.
Qix - MONICA DISALAHKAN

1
ArrayUtils bukan bagian dari JDK.
mbmast

0

Jika Anda tidak ingin bergantung pada API pihak ketiga, berikut adalah kode yang berfungsi untuk JDK7 atau di bawahnya. Saya tidak membuat instance Objek Karakter sementara seperti yang dilakukan oleh solusi lain di atas. foreach loop lebih mudah dibaca, lihat sendiri :)

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

Saya menggunakan StringReader kelas di java.io . Salah satu fungsinya adalah read(char[] cbuf)membaca konten string menjadi array.

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]);
}

Menjalankan ini memberi Anda output:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.