Konvertieren eines Strings in ein "Zeichen" -Array in Java


107

Ich möchte a Stringin ein Array von Objekten der Zeichenklasse konvertieren , kann die Konvertierung jedoch nicht durchführen. Ich weiß, dass ich mit der toCharArray()Methode einen String in ein Array vom primitiven Datentyp "char" konvertieren kann, aber es hilft nicht, einen String in ein Array von Objekten vom Typ Character zu konvertieren .

Wie würde ich das machen?


6
Was meinst du mit "passt nicht zum Zeichenarray"?
Barsju

Können Sie dies umformulieren oder etwas mehr artikulieren oder vielleicht ein Codebeispiel liefern?
Blackcompe

So konvertieren charzu Character, Verwendung Character.valueOf(mychar). Wenn es sich um ein Array handelt, schleifen Sie jedes Element und konvertieren Sie es.
ee.

Java benötigt eine Kartenfunktion, Lambda-Ausdrücke.
Eric Hartford

Antworten:


184

Benutze das:

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

27
Ich wünschte, ArrayUtils ist Standard in JVMs!
Alvin

4
ArrayUtilsist von commons-lang, nicht JDK, richtig?
Eric Wang

66

Ein Liner mit ::

String str = "testString";

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

Was es tut ist:

  • Holen Sie sich einen IntStreamder Charaktere (vielleicht möchten Sie auch sehen codePoints())
  • Ordne jeden 'Zeichen'-Wert zu Character(du musst ihn umwandeln, um tatsächlich zu sagen, dass er wirklich ein ist char, und dann wird er von Java automatisch verpackt Character)
  • Holen Sie sich das resultierende Array durch Aufrufen toArray()

33

Warum nicht selbst eine kleine Methode schreiben?

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

Zu viele Zeichenobjekte werden instanziiert, wenn es sich um eine große Zeichenfolge handelt.
RealPK

2
Warum nicht selbst eine kleine Methode schreiben? Da bereits eine Methode vorhanden ist (toCharArray ()) und die bereits vorhandene Methode weitaus mehr Ingenieure hat, die sich für die Gewährleistung der Leistung und Zuverlässigkeit dieser Funktion interessieren, als von einem Stackoverflow-Post kopiert / eingefügt werden kann.
HoldOffHunger

1
@HoldOffHunger Du hast absolut recht. ToCharArray () gibt jedoch den primitiven Array-Typ anstelle des Character-Objekts zurück, wie dies von OP benötigt wird. Natürlich können Sie das Zeichen [] erneut durchlaufen, um es in Zeichen [] umzuwandeln. Das Durchlaufen einer Zeichenfolgenanzeige zum Erstellen eines Character-Objekts ist jedoch so einfach, dass ich nicht verstehe, warum Sie nicht einfach Ihr eigenes Objekt rollen, wenn Sie keine Bibliothek von Drittanbietern einbinden möchten.
Alvin

6

Ich hoffe, der folgende Code wird Ihnen helfen.

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

Es funktioniert und die Ausgabe ist:

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
Dies ist überhaupt nicht das, wonach das OP gefragt hat.
Qix - MONICA wurde

3

String#toCharArraygibt ein Array von zurück char, was Sie haben, ist ein Array von Character. In den meisten Fällen ist es egal , wenn Sie verwenden charoder Characterwie es ist Autoboxing . Das Problem in Ihrem Fall ist, dass Arrays nicht autoboxed sind. Ich schlage vor, Sie verwenden ein Array von char ( char[]).


2

In diesem Fall müssen Sie Ihre eigene Methode schreiben. Verwenden Sie eine Schleife und holen Sie sich jedes Zeichen mit charAt(i)und setzen Sie es mit auf Ihr Character[]Array arrayname[i] = string.charAt[i].


2

Diese Methode verwendet String als Argument und gibt das Zeichenarray zurück

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

ein anderer Weg, es zu tun.

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

Konvertieren eines Strings in ein Zeichenarray und anschließendes Konvertieren eines Zeichenarrays zurück in einen 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]

// EIN WEG: Zurückkonvertieren des Zeichenarrays in einen 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

// Zweiter WEG: Zurückkonvertieren des Zeichenarrays in einen String

String.valueOf(characterArray);

// Dritter Weg: Zurückkonvertieren des Zeichenarrays in einen String

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

Konvertieren einer Zeichenfolge in ein Zeichenarray

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

Konvertieren des Zeichenarrays in ein Zeichenarray

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


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

Vorteile der Konvertierung von char Array in Character Array Sie können die Funktion Arrays.stream verwenden, um das Sub-Array abzurufen

String subStringFromCharacterArray = 

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

0

Wenn Sie mit JTextField arbeiten, kann dies hilfreich sein.

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

Verkettung ist immer am besten: D.

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

1
chaining is always bestFalsch.
Qix - MONICA wurde

1
ArrayUtils ist nicht Teil des JDK.
mbmast

0

Wenn Sie sich nicht auf APIs von Drittanbietern verlassen möchten, finden Sie hier einen Arbeitscode für JDK7 oder niedriger. Ich instanziiere keine temporären Charakterobjekte, wie dies bei anderen oben genannten Lösungen der Fall ist. foreach-Schleifen sind besser lesbar, sehen Sie selbst :)

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

Ich habe die StringReader- Klasse in java.io verwendet . Eine seiner Funktionen read(char[] cbuf)liest den Inhalt eines Strings in ein 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]);
}

Wenn Sie dies ausführen, erhalten Sie die Ausgabe:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.