konversi string menjadi string array di java

115

Saya punya string = "name"; saya ingin mengubahnya menjadi string array. Bagaimana saya melakukannya? Apakah ada fungsi bawaan java? Secara manual saya bisa melakukannya tapi saya sedang mencari fungsi java built in.

Saya ingin array di mana setiap karakter string akan menjadi string. seperti char 'n' sekarang akan menjadi string "n" yang disimpan dalam array.

riyana
sumber
10
Saya kira Anda tidak bermaksud String[] ary = new String[] { "name" };, operasi apa yang Anda butuhkan? membelah karakter misalnya?
rsp
Apakah yang Anda maksud adalah array string? Bagaimana Anda bisa memiliki fungsi untuk itu, itu hanya akan menjadi: String [] array = {"Name"}; atau maksud Anda array karakter?
Woody
1
Saya ingin array di mana setiap karakter string akan menjadi string. seperti char 'n' sekarang akan menjadi string "n" yang disimpan dalam array
riyana

Jawaban:

201

Untuk memulai tugas Anda, String.splitpisahkan string pada ekspresi reguler dan ekspresi ini mungkin berupa string kosong:

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

Menghasilkan array:

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

Menyingkirkan entri pertama yang kosong dibiarkan sebagai latihan untuk pembaca :-)

Catatan: Di Java 8, elemen kosong pertama tidak lagi disertakan.

rsp
sumber
21
Catatan: Menggunakan jdk8, entri kosong pertama tidak lagi disertakan dalam larik yang dihasilkan. Lihat stackoverflow.com/questions/22718744/…
Alexis C.
42
String strName = "name";
String[] strArray = new String[] {strName};
System.out.println(strArray[0]); //prints "name"

Baris kedua mengalokasikan array String dengan panjang 1. Perhatikan bahwa Anda tidak perlu menentukan sendiri panjangnya, seperti:

String[] strArray = new String[1];

sebagai gantinya, panjangnya ditentukan oleh jumlah elemen di initalizer. Menggunakan

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

membuat array dengan panjang 3.

f1sh
sumber
22
Tidak benar-benar menjawab pertanyaan itu.
atamanroman
1
Periksa riwayat revisi pertanyaan dan Anda akan melihat bahwa pertanyaan tersebut menanyakan sesuatu yang berbeda sebelum diedit. Jawaban ini membalas versi pertama.
f1sh
14

Dengan asumsi Anda benar-benar menginginkan array string karakter tunggal (bukan char[]atau Character[])

1. Menggunakan regex:

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

Lookahead negatif dengan lebar nol mencegah pencocokan pola di awal input, sehingga Anda tidak mendapatkan string kosong di depan.

2. Menggunakan Jambu Biji :

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
sumber
1
Regexp itu adalah IMO terbaik. Berhati-hatilah karena Java 8 memperbaiki masalah khusus itu.
shkschneider
13

Saya kira tidak perlu untuk itu, karena tidak akan lebih sederhana dari

String[] array = {"name"};

Tentu saja jika Anda bersikeras, Anda bisa menulis:

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

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

[Sunting] Jika Anda menginginkan String satu huruf, Anda dapat menggunakan:

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

Sayangnya s [0] akan kosong, tetapi setelah ini huruf n, a, m, e akan mengikuti. Jika ini merupakan masalah, Anda dapat menggunakan misalnya System.arrayCopy untuk menyingkirkan entri array pertama.

Landei
sumber
Saya ingin sebuah array di mana setiap karakter dari string tersebut sekarang akan menjadi string sendiri. seperti char 'n' sekarang akan menjadi string "n" yang disimpan dalam array
riyana
@Landei Saya memiliki String date = "2013/01/05" dan saat saya menggunakan .split ("/"), string kosong tidak dikembalikan sebagai [0] dan berfungsi dengan baik. Apakah ada perbedaan antara pemisah ekspresi reguler saya dan milik Anda?
Behzad
@Behzad AFAIK Anda memiliki perilaku lucu dengan entri kosong hanya untuk pola kosong, bukan Anda memiliki beberapa pembatas.
Landei
@Landei Beri tahu saya bahwa saya mengerti maksud Anda. Maksud Anda, hanya menggunakan "" dalam fungsi terpisah mengembalikan 0 sebagai nilai larik pertama? Iya?
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
sumber
11

Di java 8, ada metode yang dapat digunakan untuk melakukan ini: toCharArray ():

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

Ini menghasilkan array berikut:

[a,b,c,d,e,f]
fonji
sumber
Meskipun bukan larik string, ini sempurna untuk kasus di mana Anda memerlukan karakter alih-alih akses konyol String.charAt(0)pada string karakter tunggal yang tidak perlu! ;)
varun
Anda menyelamatkan hidup saya @fonji
Amit Sharma
5

Larik string = larik karakter?

Atau apakah Anda memiliki string dengan banyak kata yang masing-masing harus menjadi elemen array?

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

yang hilang
sumber
Saya ingin array di mana setiap karakter string akan menjadi string. seperti char 'n' sekarang akan menjadi string "n" yang disimpan dalam array
riyana
4

Cukup gunakan .toCharArray()metode di Java:

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

Ini seharusnya berfungsi dengan baik di Java 8.

Radhesh Khanna
sumber
2

Anda dapat menggunakan string.chars().mapToObj(e -> new String(new char[] {e}));, meskipun ini cukup panjang dan hanya berfungsi dengan java 8. Berikut beberapa metode lainnya:

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

Yang terakhir panjangnya tidak perlu, itu hanya untuk kesenangan!

HyperNeutrino
sumber
2

Metode tambahan:

Seperti yang telah disebutkan, Anda dapat mengonversi "nama" String asli menjadi array karakter dengan cukup mudah:

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

Untuk melanjutkan rangkaian pemikiran ini, Anda kemudian dapat mengonversi array karakter menjadi array String:

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

Pada titik ini, stringArray Anda akan diisi dengan nilai asli dari string "name" asli Anda. Misalnya, sekarang menelepon

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

Akan mengembalikan nilai "n" (sebagai String) dalam kasus ini.

AGéoCoder
sumber
2

Memisahkan string kosong dengan String.split () mengembalikan larik elemen tunggal yang berisi string kosong . Dalam kebanyakan kasus Anda mungkin lebih suka mendapatkan array kosong, atau null jika Anda mengirimkan null, yang persis seperti yang Anda dapatkan dengan 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"]

Pilihan lain adalah google guava Splitter.split () dan Splitter.splitToList () yang mengembalikan iterator dan daftar yang sesuai. Berbeda dengan versi apache, Splitter akan melempar NPE ke 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

Jika Anda menginginkan daftar daripada iterator, gunakan Splitter.splitToList () .

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

Metode String.splitakan menghasilkan 1 kosong, Anda harus menghapusnya dari array. Itu membosankan.

Frank Hou
sumber
1

Berdasarkan judul pertanyaan ini, saya datang ke sini ingin mengubah String menjadi array substring dibagi dengan beberapa pembatas. Saya akan menambahkan jawaban itu di sini untuk orang lain yang mungkin memiliki pertanyaan yang sama.

Ini membuat array kata dengan memisahkan string di setiap spasi:

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

Ini membuat array berikut:

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

Sumber

Diuji di Java 8

Suragch
sumber
1

Di sini telah dikonversi string sederhana menjadi string array menggunakan metode split.

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

Keluaran

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