2010-08-05 22 views
72

Tengo un string="name"; Quiero convertir en una matriz de cadenas. ¿Cómo lo hago? ¿Hay alguna función incorporada java? Manualmente puedo hacerlo pero estoy buscando una función java incorporada.cadena a cadena de matriz de conversión en Java

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

+6

supongo que no quieres decir ' String [] ary = new String [] {"name"}; ', ¿qué operación necesita? dividir en personajes por ejemplo? – rsp

+0

¿Te refieres a una matriz de cuerdas? ¿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' será ahora cadena "n" almacenada en una matriz – riyana

Respuesta

140

Para los primeros pasos en su asignación, String.split divide cuerdas de una expresión regular, esta expresión puede ser una cadena vacía:

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

se obtiene la matriz:

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

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

Nota: En Java 8, el primer elemento vacío ya no está incluido.

+14

Nota: Al usar jdk8, la primera entrada vacía ya no está incluida en la matriz resultante. Ver http: // stackoverflow.com/questions/22718744/why-do-split-in-jdk-8-sometimes-remove-empty-strings-if-they-are-at-start-of –

4

Array cadena = array de caracteres?

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

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

+0

quiero una matriz donde cada carácter del cadena será una cadena. como char 'n' ahora será cadena "n" almacenada en una matriz – riyana

37
String strName = "name"; 
String[] strArray = new String[] {strName}; 
System.out.println(strArray[0]); //prints "name" 

La segunda línea asigna una matriz de cadena con la longitud de 1. Tenga en cuenta que no es necesario especificar una longitud de ti mismo, tales como:

String[] strArray = new String[1]; 

lugar, la duración está determinada por la cantidad de elementos en el iniciador. Usando

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

crea una matriz con una longitud de 3.

+16

Realmente no responde la pregunta. – atamanroman

+1

Revise el historial de revisión de la pregunta y verá que la pregunta es pidiendo algo diferente antes de editarla. Esta respuesta responde a la primera versión. – f1sh

12

supongo que simplemente no hay necesidad de hacerlo, ya que no obtendrá más simple que

String[] array = {"name"}; 

Por supuesto, si insiste, se podría escribir:

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

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

[Editar] Si desea Cuerdas de una sola letra , Se puede utilizar:

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

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

+0

quiero una matriz donde cada carácter de la cadena será ahora una cadena. como char 'n' será ahora string "n" almacenado en una matriz – riyana

+0

Ver mi [Editar] ... – Landei

+0

@Landei Tengo esta String date = "2013/01/05" y cuando uso .split ("/ "), no devuelve cadena vacía como [0] y funciona bien. ¿Hay alguna diferencia entre mi divisor de expresiones regular y el tuyo? – Behzad

11

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

1.Usando una expresión regular:

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

La búsqueda negativa hacia delante anchura cero impide que el patrón de coincidencia en el inicio de la entrada, por lo que no obtener una cadena vacía que conduce.

2. Usando Guava:

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); 
} 
+0

Esa expresión regular es la mejor IMO. Tenga en cuenta que Java 8 solucionó ese problema en particular de todos modos. – shkschneider

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

Método String.split generará primera vacío, hay que sacarlo de la matriz. Es aburrido.

1

Usted podría utilizar string.chars().mapToObj(e -> new String(new char[] {e}));, aunque esto es bastante largo y sólo funciona con Java 8. Aquí están 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 simplemente innecesariamente largo , ¡es solo por diversion!

2

Un método adicional:

Como ya se ha mencionado, se puede convertir la cadena "nombre" original a una matriz de caracteres con bastante facilidad:

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

para continuar con esta línea de pensamiento, se podría entonces convertir la matriz de caracteres a una matriz de cadenas:

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 "nombre" original. Por ejemplo, ahora llamando

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

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

2

Dividir una cadena vacía con String.split() devuelve una matriz de elemento único que contiene una cadena vacía. En la mayoría de los casos, probablemente prefiera obtener un conjunto vacío, o un valor nulo si pasa un valor 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 guayaba Splitter.split() y Splitter.splitToList() que devuelven un iterador y una lista correspondiente. A diferencia de la versión de Apache Splitter arrojará una 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 a continuación, utilizar Splitter.splitToList().

7

en Java 8, hay un método con el que se puede hacer esto: toCharArray():

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

Esto da lugar a la siguiente matriz:

[a,b,c,d,e,f] 
1

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

Esto hace que una matriz de palabras mediante el fraccionamiento de la cuerda 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] 

Source

Probado en Java 8

1

aquí tiene convertir cadena simple a matriz de cadena usando el método de división.

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

salida

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

basta con utilizar el método .tocharArray() en Java

String k = "abc"; 
char alpha = k.tocharArray(); 

Esto debería funcionar bien en JAVA 8