Conversione di stringhe in array "Character" in Java


108

Voglio convertire un Stringin un array di oggetti della classe Character ma non riesco a eseguire la conversione. So che posso convertire una stringa in un array di tipo di dati primitivo "char" con il toCharArray()metodo, ma non aiuta a convertire una stringa in un array di oggetti di tipo carattere .

Come potrei farlo?


6
Cosa intendi con "non si adatta alla matrice di caratteri"?
Barsju

Puoi riformularlo o articolarlo un po 'di più, o forse fornire un esempio di codice?
blackcompe

Per convertire charin Character, usa Character.valueOf(mychar). Se è un array, esegui il ciclo di ogni elemento e converti.
ee.

java necessita di una funzione map, espressioni lambda.
Eric Hartford

Risposte:


184

Usa questo:

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

27
Vorrei che ArrayUtils fosse standard nelle JVM!
Alvin

4
ArrayUtilsviene da commons-lang, non JDK, giusto?
Eric Wang,

66

Una fodera con :

String str = "testString";

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

Quello che fa è:

  • prendi uno IntStreamdei personaggi (potresti voler guardare anche codePoints())
  • mappare ogni valore di 'carattere' su Character(è necessario eseguire il cast per dire effettivamente che è davvero a char, e quindi Java lo inserirà automaticamente in un box Character)
  • ottenere l'array risultante chiamando toArray()

33

Perché non scrivere tu stesso un piccolo metodo

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

Se si tratta di una stringa enorme, verrà creata un'istanza di troppi oggetti carattere.
realPK

2
Perché non scrivere un po 'di metodo da soli? Perché esiste già un metodo (toCharArray ()), e il metodo che già esiste ha molti più ingegneri dedicati e interessati a garantire le prestazioni e l'affidabilità di quella funzione, rispetto a ciò che può essere copiato / incollato da un post di stackoverflow.
HoldOffHunger

1
@HoldOffHunger Hai assolutamente ragione. Tuttavia, toCharArray () restituisce il tipo primitivo di array invece dell'oggetto Character come richiesto da OP. Certo, puoi ripetere il ciclo del carattere [] per convertirlo in Carattere []. Ma il ciclo attraverso un annuncio di stringa che crea un oggetto Character è così semplice che non vedo perché non tirare il tuo se non vuoi portare nella libreria di terze parti.
Alvin,

6

Spero che il codice qui sotto ti possa aiutare.

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

Funziona e l'output è:

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
Questo non è affatto quello che chiedeva l'OP.
Qix - MONICA ERA MALTRATTATA

3

String#toCharArrayrestituisce un array di char, quello che hai è un array di Character. Nella maggior parte dei casi non importa se usi charo Characterpoiché c'è l' autoboxing . Il problema nel tuo caso è che gli array non sono autoboxed, ti suggerisco di usare un array di char ( char[]).


2

Devi scrivere il tuo metodo in questo caso. Usa un ciclo e ottieni ogni carattere usando charAt(i)e impostalo sul tuo Character[]array usando arrayname[i] = string.charAt[i].


2

Questo metodo accetta String come argomento e restituisce 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

un altro modo per farlo.

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

Conversione da stringa a matrice di caratteri e quindi conversione di matrice di caratteri in stringa

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

// UN MODO: riconvertire l'array di caratteri in stringa

  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

// Secondo MODO: riconvertire l'array di caratteri in String

String.valueOf(characterArray);

// Terzo MODO: riconvertire l'array di caratteri in String

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

Conversione di una stringa in una matrice di caratteri

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

Conversione di un array di caratteri in un array di caratteri

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


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

vantaggi della conversione di un array di caratteri in un array di caratteri è possibile utilizzare la funzione Arrays.stream per ottenere l'array secondario

String subStringFromCharacterArray = 

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

0

se stai lavorando con JTextField, può essere utile ..

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

Se non vuoi fare affidamento su API di terze parti, ecco un codice funzionante per JDK7 o inferiore. Non sto istanziando oggetti carattere temporanei come fatto da altre soluzioni sopra. i cicli foreach sono più leggibili, vedi te stesso :)

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

Ho usato la StringReader classe java.io . Una delle sue funzioni read(char[] cbuf)legge il contenuto di una stringa in un 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]);
}

L'esecuzione di questo ti dà l'output:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.