การแปลง String เป็นอาร์เรย์“ Character” ใน Java


109

ฉันต้องการแปลง a Stringเป็นอาร์เรย์ของออบเจ็กต์ของคลาสCharacterแต่ฉันไม่สามารถทำการแปลงได้ ฉันรู้ว่าฉันสามารถแปลงสตริงไปยังอาร์เรย์ของประเภทชนิดข้อมูลดั้งเดิม "ถ่าน" กับ ๆtoCharArray()วิธี แต่ก็ไม่ได้ช่วยในการแปลงสตริงไปยังอาร์เรย์ของวัตถุของตัวละครประเภท

ฉันจะทำเช่นนั้นได้อย่างไร?


6
"ไม่พอดีกับอาร์เรย์อักขระ" หมายความว่าอย่างไร
Barsju

คุณสามารถพูดคำนี้ใหม่หรือพูดให้ชัดเจนขึ้นอีกเล็กน้อยหรืออาจให้ตัวอย่างโค้ดได้หรือไม่?
blackcompe

หากต้องการแปลงcharให้Characterใช้Character.valueOf(mychar)ไฟล์. ถ้าเป็นอาร์เรย์ให้วนแต่ละองค์ประกอบและแปลง
เอะ.

java ต้องการฟังก์ชันแผนที่นิพจน์แลมบ์ดา
Eric Hartford

คำตอบ:


186

ใช้สิ่งนี้:

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

27
ฉันหวังว่า ArrayUtils เป็นมาตรฐานใน JVMs!
Alvin

4
ArrayUtilsมาจากcommons-langไม่ใช่ JDK ใช่ไหม?
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(คุณต้องแคสต์เพื่อบอกว่ามันเป็น a จริงๆcharแล้ว Java จะใส่กล่องให้โดยอัตโนมัติCharacter)
  • รับอาร์เรย์ผลลัพธ์โดยการโทร toArray()

34

ทำไมไม่เขียนวิธีการเล็ก ๆ น้อย ๆ ด้วยตัวคุณเอง

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

Character Objects มากเกินไปจะถูกสร้างอินสแตนซ์หากเป็น String ขนาดใหญ่
realPK

2
ทำไมไม่เขียนวิธีการเล็ก ๆ น้อย ๆ ด้วยตัวคุณเอง? เนื่องจากมีวิธีการอยู่แล้ว (toCharArray ()) และวิธีการที่มีอยู่แล้วมีวิศวกรจำนวนมากที่ทุ่มเทและสนใจในการรับประกันประสิทธิภาพและความน่าเชื่อถือของฟังก์ชันนั้นมากกว่าสิ่งที่อาจคัดลอก / วางจากโพสต์ stackoverflow
HoldOffHunger

1
@HoldOffHunger คุณพูดถูกจริงๆ อย่างไรก็ตาม toCharArray () ส่งคืนชนิดดั้งเดิมของอาร์เรย์แทนที่จะเป็นวัตถุอักขระตามที่ OP ต้องการ แน่นอนว่าคุณสามารถวนซ้ำอักขระ [] อีกครั้งเพื่อแปลงเป็นอักขระ [] ได้ แต่การวนซ้ำโฆษณาสตริงที่สร้างออบเจ็กต์ตัวละครนั้นง่ายมากฉันไม่เห็นว่าทำไมไม่ลองม้วนของคุณเองถ้าคุณไม่ต้องการนำไลบรารีของบุคคลที่สามเข้ามา
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 - MONICA MISTREATED

3

String#toCharArrayส่งกลับอาร์เรย์ของสิ่งที่คุณมีคืออาร์เรย์ของchar Characterในกรณีส่วนใหญ่ไม่สำคัญว่าคุณจะใช้charหรือCharacterมีการทำกล่องอัตโนมัติ ปัญหาในกรณีของคุณคืออาร์เรย์ไม่ได้ถูกปิดอัตโนมัติฉันขอแนะนำให้คุณใช้อาร์เรย์ของถ่าน ( char[])


2

คุณต้องเขียนวิธีการของคุณเองในกรณีนี้ ใช้ห่วงและได้รับตัวละครแต่ละตัวใช้charAt(i)และตั้งค่าให้คุณอาเรย์ที่ใช้Character[]arrayname[i] = string.charAt[i]


2

วิธีนี้ใช้ String เป็นอาร์กิวเมนต์และส่งคืน Character Array

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

การแปลง String เป็น Character Array แล้วแปลง Character array กลับเป็น 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: การแปลงอาร์เรย์อักขระกลับเป็น 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

// วิธีที่สอง: การแปลงอาร์เรย์อักขระกลับเป็น String

String.valueOf(characterArray);

// วิธีที่สาม: การแปลงอาร์เรย์อักขระกลับเป็น String

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

การแปลงสตริงเป็น Character Array

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

การแปลง char array เป็น Character Array

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


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

ประโยชน์ของการแปลง char Array เป็น Character Array คุณสามารถใช้ Arrays.stream funtion เพื่อรับอาร์เรย์ย่อย

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

การล่ามโซ่ดีที่สุดเสมอ: D

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

1
chaining is always bestเท็จ
Qix - MONICA MISTREATED

1
ArrayUtils ไม่ได้เป็นส่วนหนึ่งของ JDK
mbmast

0

หากคุณไม่ต้องการพึ่งพา API ของบุคคลที่สามนี่คือรหัสที่ใช้งานได้สำหรับ JDK7 หรือต่ำกว่า ฉันไม่ได้สร้างอินสแตนซ์ออบเจ็กต์ตัวละครชั่วคราวเหมือนที่ทำโดยโซลูชันอื่น ๆ ข้างต้น foreach loops สามารถอ่านได้มากขึ้นดูเอาเอง :)

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

ผมใช้StringReaderชั้นในjava.io หนึ่งในฟังก์ชันนี้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.