Conversión de cadenas en una matriz de "caracteres" en Java

108

Quiero convertir una Stringa una matriz de objetos de la clase Character pero no puedo realizar la conversión. Sé que puedo convertir una Cadena en una matriz de tipo de datos primitivo "char" con el toCharArray()método, pero no ayuda a convertir una Cadena en una matriz de objetos de tipo Carácter .

¿Cómo lo haría?

kgd
fuente
6
¿Qué quieres decir con "no encaja con la matriz de caracteres"?
Barsju
¿Puede reformular esto o articular un poco más, o tal vez proporcionar un ejemplo de código?
blackcompe
Para convertir chara Character, use Character.valueOf(mychar). Si es una matriz, repita cada elemento y conviértalo.
ee.
java necesita una función de mapa, expresiones lambda.
Eric Hartford

Respuestas:

184

Utilizar este:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);
Kuldeep Jain
fuente
27
¡Ojalá ArrayUtils sea estándar en las JVM!
Alvin
4
ArrayUtilses de commons-lang, no de JDK, ¿verdad?
Eric Wang
66

Un revestimiento 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); 

Lo que hace es:

  • obtener uno IntStreamde los personajes (es posible que desee mirar también codePoints())
  • mapear cada valor de 'carácter' a Character(debe lanzar para decir realmente que es realmente a char, y luego Java lo encasillará automáticamente Character)
  • obtener la matriz resultante llamando toArray()
Alexis C.
fuente
33

¿Por qué no escribes un pequeño método tú mismo?

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
fuente
Demasiados objetos de carácter serán instanciados si es una cadena enorme.
realPK
2
¿Por qué no escribes un pequeño método tú mismo? Porque ya existe un método (toCharArray ()), y el método que ya existe tiene muchos más ingenieros dedicados e interesados ​​en garantizar el rendimiento y confiabilidad de esa función, que lo que se puede copiar / pegar desde una publicación de stackoverflow.
HoldOffHunger
1
@HoldOffHunger Tienes toda la razón. Sin embargo, toCharArray () devuelve el tipo primitivo de matriz en lugar del objeto Character según lo necesite OP. Claro, puede recorrer el char [] nuevamente para convertirlo en Character []. Pero, recorrer un anuncio de cadena que crea un objeto Character es tan simple que no veo por qué no simplemente lanzar el suyo si no desea traer una biblioteca de terceros.
Alvin
6

Espero que el siguiente código te ayude.

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

Está funcionando y el resultado es:

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
fuente
4
Esto no es en absoluto lo que pedía el OP.
Qix - MONICA FUE MALTRATADA
3

String#toCharArraydevuelve una matriz de char, lo que tiene es una matriz de Character. En la mayoría de los casos, no importa si usa charo Characterya que hay autoboxing . El problema en su caso es que las matrices no se encuadran automáticamente, le sugiero que use una matriz de char ( char[]).

Sandro
fuente
2

Tienes que escribir tu propio método en este caso. Use un bucle y obtenga cada carácter usando charAt(i)y configúrelo en su Character[]matriz usando arrayname[i] = string.charAt[i].

Chandra Sekhar
fuente
2

Este método toma String como argumento y devuelve la matriz de caracteres

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

otra forma de hacerlo.

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
fuente
1

Conversión de cadena en matriz de caracteres y luego conversión de matriz de caracteres nuevamente en cadena

   //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: Conversión de la matriz de caracteres a 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

// Segunda MANERA: Conversión de la matriz de caracteres a String

String.valueOf(characterArray);

// Tercera MANERA: Conversión de la matriz de caracteres a una cadena

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

Conversión de cadena en matriz de caracteres

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

Conversión de matriz de caracteres a matriz de caracteres

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


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

Beneficios de convertir char Array en Character Array, puede usar la función Arrays.stream para obtener el subarreglo

String subStringFromCharacterArray = 

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

si está trabajando con JTextField, entonces puede ser útil.

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
fuente
0

encadenar siempre es mejor: D

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());
ak_2050
fuente
1
chaining is always bestFalso.
Qix - MONICA FUE MALTRATADA
1
ArrayUtils no forma parte del JDK.
mbmast
0

Si no desea depender de API de terceros, aquí hay un código de trabajo para JDK7 o inferior. No estoy creando instancias de objetos de carácter temporales como lo hicieron otras soluciones anteriores. los bucles foreach son más legibles, mírate a ti mismo :)

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
fuente
0

He utilizado el StringReader clase en java.io . Una de sus funciones read(char[] cbuf)lee el contenido de una cadena en una matriz.

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

Ejecutar esto le da la salida:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
John K
fuente