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?

kgd
quelle
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);
Kuldeep Jain
quelle
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()
Alexis C.
quelle
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;
}
Alvin
quelle
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
JDGuide
quelle
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[]).

Sandro
quelle
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].

Chandra Sekhar
quelle
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;
}
loknath
quelle
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]);
    }
Balaswamy Vaddeman
quelle
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());
Arpan Saini
quelle
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]);
M.Shams Tabrez
quelle
0

Verkettung ist immer am besten: D.

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());
ak_2050
quelle
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;
}
realPK
quelle
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
John K.
quelle