web-dev-qa-db-fra.com

Conversion de chaîne en chaîne dans java

J'ai un string="name"; que je veux convertir en un tableau de chaînes. Comment fait-on ça? Existe-t-il une fonction intégrée Java? 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.

103
riyana

Pour commencer votre affectation, String.split divise les chaînes d'une expression régulière. 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.

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

La deuxième ligne alloue un tableau de chaînes 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'initalizer. En utilisant

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

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

41
f1sh

En supposant que vous souhaitiez réellement un tableau de chaînes à caractère unique (pas un char[] ou Character[])

1. En utilisant une regex:

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

Le préfixe négatif de largeur zéro empêche la mise en correspondance du motif au début de l'entrée, de sorte que vous n'obtenez pas de chaîne vide en tête.

2. Utilisation de 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);
}
14
finnw

Je suppose qu’il 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 d'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 supprimer la première entrée du tableau.

13
Landei
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;
}
10
atamanroman

Dans Java 8, il existe une méthode avec laquelle vous pouvez procéder: toCharArray ():

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

Cela résulte dans le tableau suivant:

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

String array = 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);

4
thelost
3
Aidanc

Utilisez simplement la méthode .tocharArray () en Java

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

Cela devrait fonctionner correctement dans Java 8

3
Radhesh Khanna

Vous pouvez 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
HyperNeutrino

Le fractionnement d'une chaîne vide avec String.split () renvoie un tableau à élément unique contenant une chaîne vide . Dans la plupart des cas, vous préféreriez probablement obtenir un tableau vide ou une valeur null si vous transmettez une valeur null, ce qui correspond 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 jettera 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 () .

2
ccpizza

Une méthode supplémentaire:

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

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

Pour poursuivre sur cette lancée, vous pouvez ensuite convertir le tableau de caractères en tableau de chaînes:

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

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

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

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

2
AGéoCoder

voici converti une chaîne simple en un tableau de chaînes en utilisant la méthode split.

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

Sortie

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
1
Rahul Chaube
/**
 * <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.split générera 1 vide, vous devez la supprimer du tableau. C'est ennuyant.

1
Frank Hou

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é par un délimiteur. J'ajouterai cette réponse ici aux autres qui pourraient avoir la même question.

Cela crée un tableau de mots en scindant 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]

Source

Testé en Java 8

1
Suragch