Chuyển đổi chuỗi thành mảng "Ký tự" trong Java


108

Tôi muốn chuyển đổi a Stringthành một mảng các đối tượng của lớp Character nhưng tôi không thể thực hiện chuyển đổi. Tôi biết rằng tôi có thể chuyển đổi một Chuỗi thành một mảng kiểu dữ liệu nguyên thủy "char" bằng toCharArray()phương thức này nhưng nó không giúp ích gì trong việc chuyển đổi Chuỗi thành một mảng đối tượng kiểu Ký tự .

Làm thế nào tôi sẽ làm như vậy?


6
Ý bạn là gì khi "không phù hợp với mảng ký tự"?
barju

Bạn có thể diễn đạt lại từ này hoặc nói rõ hơn một chút, hoặc có thể cung cấp một ví dụ mã không?
blackcompe

Để chuyển đổi charsang Character, sử dụng Character.valueOf(mychar). Nếu nó là một mảng, hãy lặp lại từng phần tử và chuyển đổi.
ơ.

java cần một hàm bản đồ, các biểu thức lambda.
Eric Hartford

Câu trả lời:


184

Dùng cái này:

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

27
Tôi ước ArrayUtils là tiêu chuẩn trong JVM!
Alvin

4
ArrayUtilslà từ commons-lang, không phải JDK, phải không?
Eric Wang

66

Một lớp lót với :

String str = "testString";

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

Những gì nó làm là:

  • lấy một IntStreamtrong các ký tự (bạn cũng có thể muốn xem codePoints())
  • ánh xạ từng giá trị 'ký tự' tới Character(bạn cần ép kiểu để thực sự nói rằng nó thực sự là a charvà sau đó Java sẽ tự động đóng hộp nó thành Character)
  • lấy mảng kết quả bằng cách gọi toArray()

33

Tại sao không viết một phương pháp nhỏ cho mình

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

Quá nhiều Đối tượng Ký tự sẽ được khởi tạo nếu nó là một Chuỗi lớn.
realPK

2
Tại sao không tự viết một phương pháp nhỏ? Bởi vì một phương thức đã tồn tại (toCharArray ()) và phương thức đã tồn tại nên có nhiều kỹ sư dành cho và quan tâm đến việc đảm bảo hiệu suất và độ tin cậy của hàm đó hơn những gì có thể được sao chép / dán từ một bài đăng stackoverflow.
HoldOffHunger

1
@HoldOffHunger Bạn hoàn toàn đúng. Tuy nhiên toCharArray () trả về kiểu nguyên thủy của mảng thay vì đối tượng Character như OP cần. Chắc chắn, bạn có thể lặp lại ký tự [] để chuyển đổi nó thành Ký tự []. Tuy nhiên, việc lặp lại một chuỗi quảng cáo tạo đối tượng Character rất đơn giản, tôi không hiểu tại sao không tự cuộn nếu bạn không muốn đưa vào thư viện của bên thứ ba.
Alvin

6

Tôi hy vọng mã dưới đây sẽ giúp bạn.

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

Nó đang hoạt động và đầu ra là:

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
Đây hoàn toàn không phải là những gì OP đã yêu cầu.
Qix - MONICA ĐƯỢC HỖN HỢP

3

String#toCharArraytrả về một mảng char, những gì bạn có là một mảng Character. Trong hầu hết các trường hợp, không quan trọng nếu bạn sử dụng charhoặc Charactervì có tính năng tự động đóng hộp . Vấn đề trong trường hợp của bạn là mảng không được tự động đóng hộp, tôi khuyên bạn nên sử dụng mảng char ( char[]).


2

Bạn phải viết phương pháp của riêng bạn trong trường hợp này. Sử dụng một vòng lặp và lấy từng ký tự bằng cách sử dụng charAt(i)và đặt nó vào Character[]mảng của bạn bằng cách sử dụng arrayname[i] = string.charAt[i].


2

Phương thức này lấy Chuỗi làm đối số và trả về Mảng ký tự

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

một cách khác để làm điều đó.

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

Chuyển đổi chuỗi thành mảng ký tự và sau đó chuyển đổi mảng ký tự trở lại chuỗi

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

// MỘT CÁCH: Chuyển ngược mảng ký tự thành chuỗi

  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

// CÁCH thứ hai: Chuyển ngược mảng ký tự thành chuỗi

String.valueOf(characterArray);

// CÁCH thứ ba: Chuyển ngược mảng ký tự thành chuỗi

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

Chuyển đổi chuỗi thành mảng ký tự

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

Chuyển đổi mảng biểu đồ thành Mảng ký tự

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


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

lợi ích của việc Chuyển đổi Mảng char thành Mảng ký tự, bạn có thể sử dụng Arrays.stream funtion để lấy mảng phụ

String subStringFromCharacterArray = 

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

0

nếu bạn đang làm việc với JTextField thì nó có thể hữu ích ..

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

Nếu bạn không muốn dựa vào API của bên thứ ba, đây là mã hoạt động cho JDK7 trở xuống. Tôi không khởi tạo Đối tượng ký tự tạm thời như được thực hiện bởi các giải pháp khác ở trên. Vòng foreach dễ đọc hơn, hãy tự xem :)

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

Tôi đã sử dụng StringReader lớp trong java.io . Một trong các hàm của nó read(char[] cbuf)đọc nội dung của một chuỗi thành một mảng.

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

Chạy nó sẽ cho bạn kết quả:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.