conversion de chaîne en tableau de chaînes en java


115

J'ai un string = "name"; Je veux convertir en un tableau de chaînes. Comment fait-on ça? Existe-t-il une fonction Java intégrée? Je peux le faire manuellement mais je recherche une fonction intégrée Java.

Je veux un tableau où chaque caractère de la chaîne sera une chaîne. comme char 'n' sera maintenant la chaîne "n" stockée dans un tableau.


10
Je suppose que vous ne voulez pas dire String[] ary = new String[] { "name" };, de quelle opération avez-vous besoin? fractionnement en caractères par exemple?
rsp

Voulez-vous dire un tableau de chaînes? Comment pourriez-vous avoir une fonction pour cela, ce serait juste: String [] array = {"Name"}; ou voulez-vous dire un tableau de caractères?
Woody

1
je veux un tableau où chaque caractère de la chaîne sera une chaîne. comme char 'n' sera maintenant la chaîne "n" stockée dans un tableau
riyana

Réponses:


201

Pour commencer votre affectation, String.splitdivise les chaînes sur une expression régulière et cette expression peut être une chaîne vide:

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

Donne le tableau:

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

Se débarrasser de la 1ère entrée vide reste un exercice pour le lecteur :-)

Remarque: dans Java 8, le premier élément vide n'est plus inclus.


21
Remarque: en utilisant jdk8, la première entrée vide n'est plus incluse dans le tableau résultant. Voir stackoverflow.com/questions/22718744/…
Alexis C.

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

La deuxième ligne alloue un tableau String d'une longueur de 1. Notez que vous n'avez pas besoin de spécifier vous-même une longueur, telle que:

String[] strArray = new String[1];

au lieu de cela, la longueur est déterminée par le nombre d'éléments dans l'initaliseur. En utilisant

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

crée un tableau d'une longueur de 3.


22
Ne répond pas vraiment à la question.
atamanroman

1
Vérifiez l'historique des révisions de la question et vous verrez que la question demande quelque chose de différent avant d'être éditée. Cette réponse répond à la première version.
f1sh

14

En supposant que vous vouliez vraiment un tableau de chaînes à un seul caractère (pas un char[]ou Character[])

1. Utilisation d'une expression régulière:

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

L'anticipation négative de largeur zéro empêche la correspondance de motif au début de l'entrée, vous n'obtenez donc pas une chaîne vide de début.

2. Utilisation de la goyave :

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
Cette expression rationnelle est la meilleure OMI. Sachez que Java 8 a quand même résolu ce problème particulier.
shkschneider

13

Je suppose que ce n'est tout simplement pas nécessaire, car cela ne sera pas plus simple que

String[] array = {"name"};

Bien sûr, si vous insistez, vous pouvez écrire:

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

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

[Modifier] Si vous voulez des chaînes à une seule lettre, vous pouvez utiliser:

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

Malheureusement, s [0] sera vide, mais après cela, les lettres n, a, m, e suivront. Si cela pose un problème, vous pouvez utiliser par exemple System.arrayCopy afin de vous débarrasser de la première entrée du tableau.


je veux un tableau où chaque caractère de la chaîne sera maintenant lui-même une chaîne. comme char 'n' sera maintenant la chaîne "n" stockée dans un tableau
riyana

@Landei J'ai cette chaîne date = "2013/01/05" et quand j'utilise .split ("/"), cela ne renvoie pas de chaîne vide comme [0] et cela fonctionne très bien. Y a-t-il une différence entre mon séparateur d'expressions régulières et le vôtre?
Behzad

@Behzad AFAIK vous avez le comportement amusant avec l'entrée vide uniquement pour les modèles vides, pas de vous avez un délimiteur.
Landei

@Landei Faites-moi savoir que j'ai compris votre moyenne. Vous voulez dire que seulement en utilisant le "" dans la fonction de fractionnement renvoie 0 comme première valeur du tableau? Oui?
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

Dans java 8, il existe une méthode avec laquelle vous pouvez faire ceci: toCharArray ():

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

Cela donne le tableau suivant:

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

Bien que ce ne soit pas un tableau de chaînes, c'est parfait pour les cas où vous avez besoin de caractères au lieu d'accéder String.charAt(0)inutilement aux chaînes de caractères uniques! ;)
varun

Vous sauvez ma vie @fonji
Amit Sharma

5

Tableau de chaînes = tableau de caractères?

Ou avez-vous une chaîne avec plusieurs mots dont chacun devrait être un élément de tableau?

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


je veux un tableau où chaque caractère de la chaîne sera une chaîne. comme char 'n' sera maintenant la chaîne "n" stockée dans un tableau
riyana

4

Utilisez simplement la .toCharArray()méthode en Java:

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

Cela devrait fonctionner correctement dans Java 8.



2

Vous pouvez l'utiliser string.chars().mapToObj(e -> new String(new char[] {e}));, bien que cela soit assez long et ne fonctionne qu'avec java 8. Voici quelques méthodes supplémentaires:

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

Le dernier est juste inutilement long, c'est juste pour le plaisir!


2

Une méthode supplémentaire:

Comme cela a déjà été mentionné, vous pouvez facilement convertir le "nom" de la chaîne d'origine en un tableau de caractères:

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

Pour continuer ce train de pensée, vous pouvez ensuite convertir le tableau char en un tableau String:

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

À ce stade, votre stringArray sera rempli avec les valeurs d'origine de votre chaîne d'origine "nom". Par exemple, appeler maintenant

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

Renvoie la valeur "n" (sous forme de chaîne) dans ce cas.


2

Le fractionnement d'une chaîne vide avec String.split () renvoie un tableau d'élément unique contenant une chaîne vide . Dans la plupart des cas, vous préférerez probablement obtenir un tableau vide, ou un null si vous avez passé un null, ce qui est exactement ce que vous obtenez avec 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"]

Une autre option est google guava Splitter.split () et Splitter.splitToList () qui renvoient un itérateur et une liste en conséquence. Contrairement à la version Apache, Splitter lancera un NPE sur 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 vous voulez une liste plutôt qu'un itérateur, utilisez 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;
}

La méthode String.splitgénérera le premier vide, vous devez le supprimer du tableau. C'est ennuyant.


1

Sur la base du titre de cette question, je suis venu ici pour convertir une chaîne en un tableau de sous-chaînes divisées par un délimiteur. J'ajouterai cette réponse ici pour d'autres qui peuvent avoir la même question.

Cela crée un tableau de mots en divisant la chaîne à chaque espace:

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

Cela crée le tableau suivant:

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

La source

Testé en Java 8


1

voici avoir convertir une chaîne simple en tableau de chaînes en utilisant la méthode de fractionnement.

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

Production

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.