Konvertierung von String zu String-Array in Java

115

Ich habe ein, das string = "name"; ich in ein String-Array konvertieren möchte. Wie mache ich es? Gibt es eine eingebaute Java-Funktion? Manuell kann ich es tun, aber ich suche nach einer in Java eingebauten Funktion.

Ich möchte ein Array, in dem jedes Zeichen der Zeichenfolge eine Zeichenfolge ist. wie char 'n' wird nun die Zeichenfolge "n" in einem Array gespeichert.

Riyana
quelle
10
Ich denke du meinst nicht String[] ary = new String[] { "name" };, welche Operation brauchst du? zum Beispiel Zeichen aufteilen?
rsp
Meinen Sie ein String-Array? Wie könnten Sie eine Funktion dafür haben, es wäre nur: String [] array = {"Name"}; oder meinst du ein Zeichenarray?
Woody
1
Ich möchte ein Array, in dem jedes Zeichen der Zeichenfolge eine Zeichenfolge sein wird. wie char 'n' wird jetzt String "n" in einem Array gespeichert
Riyana

Antworten:

199

Teilen Sie String.splitZeichenfolgen in einen regulären Ausdruck auf, und dieser Ausdruck kann eine leere Zeichenfolge sein:

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

Ergibt das Array:

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

Den leeren ersten Eintrag loszuwerden, bleibt dem Leser als Übung :-)

Hinweis: In Java 8 ist das leere erste Element nicht mehr enthalten.

rsp
quelle
21
Hinweis: Mit jdk8 ist der leere erste Eintrag nicht mehr im resultierenden Array enthalten. Siehe stackoverflow.com/questions/22718744/…
Alexis C.
42
String strName = "name";
String[] strArray = new String[] {strName};
System.out.println(strArray[0]); //prints "name"

In der zweiten Zeile wird ein String-Array mit der Länge 1 zugewiesen. Beachten Sie, dass Sie selbst keine Länge angeben müssen, z.

String[] strArray = new String[1];

Stattdessen wird die Länge durch die Anzahl der Elemente im Initialisierer bestimmt. Verwenden von

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

erstellt ein Array mit einer Länge von 3.

f1sh
quelle
22
Beantwortet die Frage nicht wirklich.
Atamanroman
1
Überprüfen Sie den Revisionsverlauf der Frage, und Sie werden feststellen, dass die Frage vor der Bearbeitung nach etwas anderem fragt. Diese Antwort antwortet auf die erste Version.
f1sh
14

Angenommen, Sie möchten wirklich ein Array von Zeichenfolgen mit einem Zeichen (kein char[]oder Character[])

1. Verwenden eines regulären Ausdrucks:

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

Der negative Lookahead mit der Breite Null verhindert den Mustervergleich am Anfang der Eingabe, sodass Sie keine führende leere Zeichenfolge erhalten.

2. Verwenden von Guave :

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
quelle
1
Dieser reguläre Ausdruck ist die beste IMO. Beachten Sie, dass Java 8 dieses spezielle Problem trotzdem behoben hat.
Shkschneider
13

Ich denke, es gibt einfach keine Notwendigkeit dafür, da es nicht einfacher wird als

String[] array = {"name"};

Wenn Sie darauf bestehen, könnten Sie natürlich schreiben:

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

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

[Bearbeiten] Wenn Sie Zeichenfolgen mit einem Buchstaben möchten, können Sie Folgendes verwenden:

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

Leider ist s [0] leer, aber danach folgen die Buchstaben n, a, m, e. Wenn dies ein Problem ist, können Sie zB System.arrayCopy verwenden, um den ersten Array-Eintrag zu entfernen.

Landei
quelle
Ich möchte ein Array, in dem jedes Zeichen der Zeichenfolge jetzt selbst eine Zeichenfolge ist. wie char 'n' wird jetzt String "n" in einem Array gespeichert
Riyana
@Landei Ich habe diesen String date = "2013/01/05" und wenn ich .split ("/") verwende, wird kein leerer String als [0] zurückgegeben und es funktioniert einwandfrei. Gibt es einen Unterschied zwischen meinem Splitter für reguläre Ausdrücke und Ihrem?
Behzad
@Behzad AFAIK Sie haben das lustige Verhalten mit dem leeren Eintrag nur für leere Muster, nicht von Ihnen haben ein Trennzeichen.
Landei
@ Landi Lass mich wissen, dass ich deinen Mittelwert habe. Sie meinen, dass nur die Verwendung der "" in Split-Funktion 0 als ersten Array-Wert zurückgibt? Ja?
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
quelle
11

In Java 8 gibt es eine Methode, mit der Sie dies tun können: toCharArray ():

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

Dies führt zu folgendem Array:

[a,b,c,d,e,f]
Fonji
quelle
Obwohl dies kein String-Array ist, ist dies perfekt für Fälle, in denen Sie String.charAt(0)unnötigerweise Zeichen anstelle von dummen Zugriffen auf die einzelnen Zeichenfolgen benötigen ! ;)
Varun
Du rettest mein Leben @fonji
Amit Sharma
5

String Array = Array von Zeichen?

Oder haben Sie eine Zeichenfolge mit mehreren Wörtern, von denen jedes ein Array-Element sein sollte?

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

der Verlust
quelle
Ich möchte ein Array, in dem jedes Zeichen der Zeichenfolge eine Zeichenfolge sein wird. wie char 'n' wird jetzt String "n" in einem Array gespeichert
Riyana
3

In Typ konvertieren Char?

http://www.javadb.com/convert-string-to-character-array

Aidanc
quelle
1
Warum wird das abgelehnt? Es sieht aus wie eine Lösung für das, was gefragt wurde (soweit ich es sowieso verstehen kann) ... Auch wenn ich denke, Sie meinten char[]=)
Axel
3

Verwenden Sie einfach die .tocharArray () -Methode in Java

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

Dies sollte in JAVA 8 einwandfrei funktionieren

Radhesh Khanna
quelle
2

Sie können verwenden string.chars().mapToObj(e -> new String(new char[] {e}));, obwohl dies ziemlich langwierig ist und nur mit Java 8 funktioniert. Hier sind einige weitere Methoden:

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

Der letzte ist nur unnötig lang, nur zum Spaß!

HyperNeutrino
quelle
2

Eine zusätzliche Methode:

Wie bereits erwähnt, können Sie den ursprünglichen String "name" ganz einfach in ein char-Array konvertieren:

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

Um diesen Gedankengang fortzusetzen, können Sie das char-Array in ein String-Array konvertieren:

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

Zu diesem Zeitpunkt wird Ihr stringArray mit den Originalwerten Ihres ursprünglichen String- "Namens" gefüllt. Zum Beispiel jetzt anrufen

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

Gibt in diesem Fall den Wert "n" (als Zeichenfolge) zurück.

AGéoCoder
quelle
2

Das Teilen einer leeren Zeichenfolge mit String.split () gibt ein einzelnes Elementarray zurück, das eine leere Zeichenfolge enthält . In den meisten Fällen würden Sie wahrscheinlich lieber ein leeres Array oder eine Null erhalten, wenn Sie eine Null übergeben haben. Genau das erhalten Sie mit 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"]

Eine weitere Option ist Google Guava Splitter.split () und Splitter.splitToList (), die einen Iterator und eine Liste entsprechend zurückgeben. Im Gegensatz zur Apache-Version wirft Splitter eine NPE auf 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

Wenn Sie eine Liste anstelle eines Iterators wünschen, verwenden Sie Splitter.splitToList () .

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

Methode String.splitgeneriert leere 1., müssen Sie es aus dem Array entfernen. Es ist langweilig.

Frank Hou
quelle
1

Basierend auf dem Titel dieser Frage bin ich hierher gekommen, um einen String in ein Array von Teilzeichenfolgen umzuwandeln, die durch ein Trennzeichen getrennt sind. Ich werde diese Antwort hier für andere hinzufügen, die möglicherweise die gleiche Frage haben.

Dies ergibt eine Reihe von Wörtern, indem die Zeichenfolge an jeder Stelle aufgeteilt wird:

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

Dadurch wird das folgende Array erstellt:

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

Quelle

In Java 8 getestet

Suragch
quelle
1

Hier müssen Sie einfache Zeichenfolgen mithilfe der Split-Methode in Zeichenfolgen-Arrays konvertieren.

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

Ausgabe

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