conversión de cadena a matriz de cadena en java

115

Tengo un string = "name"; que quiero convertir en una matriz de cadenas. ¿Cómo lo hago? ¿Hay alguna función incorporada de Java? Puedo hacerlo manualmente, pero estoy buscando una función incorporada de Java.

Quiero una matriz donde cada carácter de la cadena sea una cadena. como char 'n' ahora será la cadena "n" almacenada en una matriz.

riyana
fuente
10
Supongo que no te refieres a String[] ary = new String[] { "name" };qué operación necesitas. dividir en caracteres, por ejemplo?
rsp
¿Te refieres a una matriz de cadenas? ¿Cómo podría tener una función para eso? Simplemente sería: String [] array = {"Name"}; o te refieres a una matriz de caracteres?
Woody
1
quiero una matriz donde cada carácter de la cadena será una cadena. como char 'n' ahora será la cadena "n" almacenada en una matriz
riyana

Respuestas:

199

Para comenzar con su tarea, String.splitdivide cadenas en una expresión regular y esta expresión puede ser una cadena vacía:

String[] ary = "abc".split("");

Produce la matriz:

(java.lang.String[]) [, a, b, c]

Deshacerse de la primera entrada vacía se deja como ejercicio para el lector :-)

Nota: En Java 8, el primer elemento vacío ya no se incluye.

rsp
fuente
21
Nota: Al usar jdk8, la primera entrada vacía ya no se incluye en la matriz resultante. Ver stackoverflow.com/questions/22718744/…
Alexis C.
42
String strName = "name";
String[] strArray = new String[] {strName};
System.out.println(strArray[0]); //prints "name"

La segunda línea asigna una matriz de cadenas con la longitud de 1. Tenga en cuenta que no es necesario que especifique una longitud usted mismo, como:

String[] strArray = new String[1];

en cambio, la longitud está determinada por el número de elementos en el iniciador. Utilizando

String[] strArray = new String[] {strName, "name1", "name2"};

crea una matriz con una longitud de 3.

pescado
fuente
22
Realmente no responde a la pregunta.
atamanroman
1
Verifique el historial de revisión de la pregunta y verá que la pregunta solicita algo diferente antes de ser editada. Esta respuesta responde a la primera versión.
f1sh
14

Suponiendo que realmente desea una matriz de cadenas de un solo carácter (no una char[]o Character[])

1. Usando una expresión regular:

public static String[] singleChars(String s) {
    return s.split("(?!^)");
}

La búsqueda anticipada negativa de ancho cero evita que el patrón coincida al comienzo de la entrada, por lo que no obtiene una cadena vacía inicial.

2. Usando guayaba :

import java.util.List;

import org.apache.commons.lang.ArrayUtils;

import com.google.common.base.Functions;
import com.google.common.collect.Lists;
import com.google.common.primitives.Chars;

// ...

public static String[] singleChars(String s) {
    return
        Lists.transform(Chars.asList(s.toCharArray()),
                        Functions.toStringFunction())
             .toArray(ArrayUtils.EMPTY_STRING_ARRAY);
}
finnw
fuente
1
Esa expresión regular es la mejor OMI. Tenga en cuenta que Java 8 solucionó ese problema en particular de todos modos.
shkschneider
13

Supongo que simplemente no es necesario, ya que no será más simple que

String[] array = {"name"};

Por supuesto que si insistes, podrías escribir:

static String[] convert(String... array) {
   return array;
}

String[] array = convert("name","age","hobby"); 

[Editar] Si desea cadenas de una sola letra, puede usar:

String[] s = "name".split("");

Desafortunadamente, s [0] estará vacío, pero después de esto seguirán las letras n, a, m, e. Si esto es un problema, puede usar, por ejemplo, System.arrayCopy para deshacerse de la primera entrada de la matriz.

Landei
fuente
Quiero una matriz donde cada carácter de la cadena será ahora una cadena. como char 'n' ahora será la cadena "n" almacenada en una matriz
riyana
@Landei Tengo este String date = "2013/01/05" y cuando uso .split ("/"), no devuelve una cadena vacía como [0] y funciona bien. ¿Hay alguna diferencia entre mi divisor de expresiones regulares y el suyo?
Behzad
@Behzad AFAIK tienes el comportamiento divertido con la entrada vacía solo para patrones vacíos, no tienes algún delimitador.
Landei
@Landei Déjame saber que entendí tu maldad. ¿Quiere decir que solo usando el "" en la función dividida se devuelve 0 como primer valor de matriz? ¿si?
Behzad
12
String data = "abc";
String[] arr = explode(data);

public String[] explode(String s) {
    String[] arr = new String[s.length];
    for(int i = 0; i < s.length; i++)
    {
        arr[i] = String.valueOf(s.charAt(i));
    }
    return arr;
}
atamanroman
fuente
11

En java 8, hay un método con el que puede hacer esto: toCharArray ():

String k = "abcdef";
char[] x = k.toCharArray();

Esto resulta en la siguiente matriz:

[a,b,c,d,e,f]
fonji
fuente
Aunque no es una matriz de cadenas, esto es perfecto para los casos en los que necesita caracteres en lugar de accesos tontos a String.charAt(0)cadenas de caracteres individuales innecesariamente. ;)
varun
Me salvas la vida @fonji
Amit Sharma
5

Matriz de cadenas = matriz de caracteres?

¿O tiene una cadena con varias palabras, cada una de las cuales debería ser un elemento de matriz?

String[] array = yourString.split(wordSeparator);

el perdido
fuente
quiero una matriz donde cada carácter de la cadena será una cadena. como char 'n' ahora será la cadena "n" almacenada en una matriz
riyana
4

Simplemente use el .toCharArray()método en Java:

String k = "abc";
char[] alpha = k.toCharArray();

Esto debería funcionar bien en Java 8.

Radhesh Khanna
fuente
2

Podría usar string.chars().mapToObj(e -> new String(new char[] {e}));, aunque esto es bastante largo y solo funciona con Java 8. Aquí hay algunos métodos más:

string.split(""); (Has an extra whitespace character at the beginning of the array if used before Java 8) string.split("|"); string.split("(?!^)"); Arrays.toString(string.toCharArray()).substring(1, string.length() * 3 + 1).split(", ");

El último es innecesariamente largo, ¡es solo por diversión!

HyperNeutrino
fuente
2

Un método adicional:

Como ya se mencionó, puede convertir el "nombre" de cadena original en una matriz de caracteres con bastante facilidad:

String originalString = "name";
char[] charArray = originalString.toCharArray();

Para continuar con esta línea de pensamiento, puede convertir la matriz char en una matriz String:

String[] stringArray = new String[charArray.length];
for (int i = 0; i < charArray.length; i++){
    stringArray[i] = String.valueOf(charArray[i]);
}

En este punto, su stringArray se llenará con los valores originales de su cadena original "nombre". Por ejemplo, ahora llamando

System.out.println(stringArray[0]);

Devolverá el valor "n" (como una cadena) en este caso.

AGéoCoder
fuente
2

Dividir una cadena vacía con String.split () devuelve una matriz de un solo elemento que contiene una cadena vacía . En la mayoría de los casos, probablemente prefiera obtener una matriz vacía, o un nulo si pasa un nulo, que es exactamente lo que obtiene con org.apache.commons.lang3.StringUtils.split (str) .

import org.apache.commons.lang3.StringUtils;

StringUtils.split(null)       => null
StringUtils.split("")         => []
StringUtils.split("abc def")  => ["abc", "def"]
StringUtils.split("abc  def") => ["abc", "def"]
StringUtils.split(" abc ")    => ["abc"]

Otra opción es google guava Splitter.split () y Splitter.splitToList () que devuelven un iterador y una lista correspondientemente. A diferencia de la versión de Apache, Splitter lanzará un NPE en null:

import com.google.common.base.Splitter;

Splitter SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();

SPLITTER.split("a,b,   c , , ,, ")     =>  [a, b, c]
SPLITTER.split("")                     =>  []
SPLITTER.split("  ")                   =>  []
SPLITTER.split(null)                   =>  NullPointerException

Si desea una lista en lugar de un iterador, utilice Splitter.splitToList () .

ccpizza
fuente
1
/**
 * <pre>
 * MyUtils.splitString2SingleAlphaArray(null, "") = null
 * MyUtils.splitString2SingleAlphaArray("momdad", "") = [m,o,m,d,a,d]
 * </pre>
 * @param str  the String to parse, may be null
 * @return an array of parsed Strings, {@code null} if null String input
 */
public static String[] splitString2SingleAlphaArray(String s){
    if (s == null )
        return null;
    char[] c = s.toCharArray();
    String[] sArray = new String[c.length];
    for (int i = 0; i < c.length; i++) {
        sArray[i] = String.valueOf(c[i]);
    }
    return sArray;
}

El método String.splitgenerará vacío en primer lugar, debe eliminarlo de la matriz. Es aburrido.

Frank Hou
fuente
1

Basado en el título de esta pregunta, vine aquí con el deseo de convertir una Cadena en una matriz de subcadenas divididas por algún delimitador. Agregaré esa respuesta aquí para otros que puedan tener la misma pregunta.

Esto crea una matriz de palabras dividiendo la cadena en cada espacio:

String str = "string to string array conversion in java";
String delimiter = " ";
String strArray[] = str.split(delimiter);

Esto crea la siguiente matriz:

// [string, to, string, array, conversion, in, java]

Fuente

Probado en Java 8

Suragch
fuente
1

Aquí hay que convertir una cadena simple en una matriz de cadenas utilizando el método dividido.

String [] stringArray="My Name is ABC".split(" ");

Salida

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
Rahul Chaube
fuente