conversione da stringa a matrice di stringhe in java


115

Ho un string = "name"; che voglio convertire in un array di stringhe. Come lo faccio? C'è qualche funzione java integrata? Manualmente posso farlo ma sto cercando una funzione java integrata.

Voglio un array in cui ogni carattere della stringa sarà una stringa. come char 'n' sarà ora la stringa "n" memorizzata in un array.


10
Immagino che non intendi String[] ary = new String[] { "name" };, di quale operazione hai bisogno? dividere in caratteri per esempio?
rsp

Intendi un array di stringhe? Come potresti avere una funzione per questo, sarebbe semplicemente: String [] array = {"Name"}; o intendi un array di caratteri?
Woody

1
voglio un array in cui ogni carattere della stringa sarà una stringa. come char 'n' ora sarà la stringa "n" memorizzata in un array
riyana

Risposte:


201

Per iniziare il tuo compito, String.splitdivide le stringhe in un'espressione regolare e questa espressione può essere una stringa vuota:

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

Produce l'array:

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

Liberarsi della prima voce vuota è un esercizio per il lettore :-)

Nota: in Java 8, il primo elemento vuoto non è più incluso.


21
Nota: utilizzando jdk8, la prima voce vuota non è più inclusa nell'array risultante. Vedi stackoverflow.com/questions/22718744/…
Alexis C.

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

La seconda riga alloca un array String con la lunghezza di 1. Nota che non è necessario specificare una lunghezza tu stesso, come ad esempio:

String[] strArray = new String[1];

invece, la lunghezza è determinata dal numero di elementi nell'initalizzatore. utilizzando

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

crea un array con una lunghezza di 3.


22
Non risponde realmente alla domanda.
atamanroman

1
Controlla la cronologia delle revisioni della domanda e vedrai che la domanda richiede qualcosa di diverso prima di essere modificata. Questa risposta risponde alla prima versione.
f1sh

14

Supponendo che tu voglia davvero un array di stringhe a carattere singolo (non un char[]or Character[])

1. Utilizzando una regex:

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

Il lookahead negativo di larghezza zero impedisce la corrispondenza del modello all'inizio dell'input, quindi non si ottiene una stringa vuota iniziale.

2. Utilizzando 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);
}

1
Quella regexp è la migliore IMO. Fai attenzione che Java 8 ha risolto comunque quel particolare problema.
shkschneider

13

Immagino che semplicemente non ce ne sia bisogno, poiché non diventerà più semplice di

String[] array = {"name"};

Ovviamente se insisti potresti scrivere:

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

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

[Modifica] Se vuoi stringhe di una sola lettera, puoi usare:

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

Sfortunatamente s [0] sarà vuoto, ma dopo seguiranno le lettere n, a, m, e. Se questo è un problema, puoi usare ad esempio System.arrayCopy per sbarazzarti della prima voce dell'array.


voglio un array in cui ogni carattere della stringa sarà ora esso stesso una stringa. come char 'n' sarà ora la stringa "n" memorizzata in un array
riyana

@ Landei ho questa stringa date = "2013/01/05" e quando uso .split ("/"), non restituisce una stringa vuota come [0] e funziona bene. C'è qualche differenza tra il mio splitter di espressioni regolari e il tuo?
Behzad

@ Behzad AFAIK hai il comportamento divertente con la voce vuota solo per i modelli vuoti, non hai un delimitatore.
Landei

@ Landei Fammi sapere che ho capito la tua media. Vuoi dire che usando solo "" nella funzione split restituisci 0 come primo valore di array? sì?
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;
}

11

In java 8, c'è un metodo con cui puoi farlo: toCharArray ():

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

Ciò risulta nel seguente array:

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

Sebbene non sia un array di stringhe, questo è perfetto per i casi in cui hai bisogno di caratteri invece di stupidi accessi alle String.charAt(0)singole stringhe di caratteri inutilmente! ;)
varun

Mi salvi la vita @fonji
Amit Sharma,

5

Matrice di stringhe = matrice di caratteri?

O hai una stringa con più parole ognuna delle quali dovrebbe essere un elemento dell'array?

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


voglio un array in cui ogni carattere della stringa sarà una stringa. come char 'n' sarà ora la stringa "n" memorizzata in un array
riyana

4

Usa semplicemente il .toCharArray()metodo in Java:

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

Questo dovrebbe funzionare bene in Java 8.



2

Puoi usarlo string.chars().mapToObj(e -> new String(new char[] {e}));, anche se questo è piuttosto lungo e funziona solo con java 8. Ecco alcuni altri metodi:

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(", ");

L'ultimo è solo inutilmente lungo, è solo per divertimento!


2

Un metodo aggiuntivo:

Come già accennato, potresti convertire il "nome" String originale in un array di caratteri abbastanza facilmente:

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

Per continuare questo treno di pensieri, puoi quindi convertire l'array char in un array String:

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

A questo punto, il tuo stringArray sarà riempito con i valori originali della tua stringa originale "name". Ad esempio, ora chiamando

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

In questo caso restituirà il valore "n" (come stringa).


2

La divisione di una stringa vuota con String.split () restituisce un singolo array di elementi contenente una stringa vuota . Nella maggior parte dei casi probabilmente preferiresti ottenere un array vuoto o un null se hai passato un null, che è esattamente ciò che ottieni 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"]

Un'altra opzione è google guava Splitter.split () e Splitter.splitToList () che restituiscono un iteratore e un elenco di conseguenza. A differenza della versione apache, Splitter genererà un NPE su 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

Se vuoi una lista piuttosto che un iteratore, usa Splitter.splitToList () .


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

Il metodo String.splitgenererà il primo vuoto, devi rimuoverlo dall'array. È noioso.


1

Sulla base del titolo di questa domanda, sono venuto qui volendo convertire una stringa in un array di sottostringhe divise da un delimitatore. Aggiungerò questa risposta qui per altri che potrebbero avere la stessa domanda.

Questo crea un array di parole dividendo la stringa in ogni spazio:

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

Questo crea il seguente array:

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

fonte

Testato in Java 8


1

ecco convertire una semplice stringa in un array di stringhe usando il metodo split.

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

Produzione

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
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.