java'da dizgeye dizi dönüşümü


115

Bir var string = "name"; bir dize diziye dönüştürmek istiyorum. Nasıl yaparım? Yerleşik herhangi bir java var mı? Manuel olarak yapabilirim ama yerleşik bir java işlevi arıyorum.

Dizenin her karakterinin bir dizge olacağı bir dizi istiyorum. char 'n' gibi artık bir dizide saklanan "n" dizisi olacaktır.


10
Sanırım String[] ary = new String[] { "name" };hangi ameliyata ihtiyacın var demek istemiyorsun? örneğin karakterleri bölmek?
rsp

Bir dizi dizisi mi demek istiyorsun? Bunun için nasıl bir işleve sahip olabilirsiniz, sadece şöyle olur: Dize [] dizi = {"Ad"}; yoksa bir karakter dizisi mi demek istiyorsun?
Woody

1
dizenin her karakterinin bir dizge olacağı bir dizi istiyorum. char 'n' gibi artık bir dizide saklanan "n" dizesi olacak
riyana

Yanıtlar:


201

Atamanıza başlamak String.splitiçin normal bir ifadedeki dizeleri böler ve bu ifade boş bir dize olabilir:

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

Şu diziyi verir:

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

Boş 1. girişten kurtulmak okuyucu için bir alıştırma olarak bırakılmıştır :-)

Not: Java 8'de, boş ilk öğe artık dahil edilmemiştir.


21
Not: jdk8 kullanıldığında, boş ilk giriş artık sonuç dizisine dahil edilmez. Stackoverflow.com/questions/22718744/… sayfasına
Alexis C.

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

İkinci satır, 1 uzunluğunda bir String dizisi tahsis eder: Bir uzunluk belirlemenize gerek olmadığını unutmayın, örneğin:

String[] strArray = new String[1];

bunun yerine uzunluk, başlatıcıdaki öğelerin sayısına göre belirlenir. kullanma

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

3 uzunluğunda bir dizi oluşturur.


22
Soruyu gerçekten cevaplamıyor.
atamanroman

1
Sorunun düzeltme geçmişini kontrol edin ve sorunun düzenlenmeden önce farklı bir şey istediğini göreceksiniz. Bu cevap ilk versiyona cevaptır.
f1sh

14

Tek karakterli dizelerden oluşan bir diziyi gerçekten istediğinizi varsayarsak (a char[]veya değil Character[])

1. Bir normal ifade kullanma:

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

Sıfır genişlikte negatif önden okuma, girdinin başlangıcında desen eşleşmesini engeller, böylece baştaki boş bir dize almazsınız.

2. Guava Kullanımı :

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
Bu regexp en iyi IMO'dur. Yine de Java 8'in bu sorunu çözdüğüne dikkat edin.
shkschneider

13

Sanırım buna gerek yok, çünkü daha basit olmayacak

String[] array = {"name"};

Tabii ısrar ederseniz, yazabilirsiniz:

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

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

[Düzenle] Tek harfli Dizeler istiyorsanız, şunları kullanabilirsiniz:

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

Maalesef s [0] boş olacak, ancak bundan sonra n, a, m, e harfleri gelecektir. Bu bir problemse, ilk dizi girişinden kurtulmak için örneğin System.arrayCopy kullanabilirsiniz.


dizenin her karakterinin artık kendisinin bir dizge olacağı bir dizi istiyorum. char 'n' gibi artık bir dizide saklanan "n" dizesi olacak
riyana

@Landei Bende bu String date = "2013/01/05" var ve .split ("/") kullandığımda, [0] olarak boş dizge döndürmüyor ve iyi çalışıyor. Normal ifade ayırıcımla sizinki arasında herhangi bir fark var mı?
Behzad

@Behzad AFAIK, sadece boş kalıplar için boş girişle komik davranışa sahipsiniz, bazı sınırlayıcılarınız yok.
Landei

@Landei Ne demek istediğimi bana bildirin. Yani bölme işlevinde yalnızca "" ilk dizi değeri olarak 0 döndürür mü? Evet?
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

Java 8'de, bunu yapabileceğiniz bir yöntem vardır: toCharArray ():

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

Bu, aşağıdaki dizi ile sonuçlanır:

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

Bir dizge dizisi olmasa da, bu, String.charAt(0)gereksiz yere tek karakter dizelerine aptalca erişmek yerine karakterlere ihtiyaç duyduğunuz durumlar için mükemmeldir ! ;)
varun

Hayatımı kurtardın @fonji
Amit Sharma

5

Dize dizisi = karakter dizisi?

Veya her biri bir dizi öğesi olması gereken birden çok kelimeden oluşan bir dizeniz mi var?

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


dizenin her karakterinin bir dizge olacağı bir dizi istiyorum. char 'n' gibi artık bir dizide saklanan "n" dizesi olacak
riyana

4

Sadece .toCharArray()Java'daki yöntemi kullanın :

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

Bu Java 8'de gayet iyi çalışmalıdır.



2

Kullanabilirsiniz string.chars().mapToObj(e -> new String(new char[] {e}));, ancak bu oldukça uzun ve yalnızca java 8 ile çalışır. İşte birkaç yöntem daha:

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

Sonuncusu gereksiz yere uzun, sadece eğlence için!


2

Ek bir yöntem:

Daha önce belirtildiği gibi, orijinal String "adını" kolayca bir char dizisine dönüştürebilirsiniz:

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

Bu düşünce zincirine devam etmek için, char dizisini bir String dizisine dönüştürebilirsiniz:

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

Bu noktada, stringArray'iniz, orijinal "name" dizenizdeki orijinal değerlerle doldurulacaktır. Örneğin, şimdi arıyor

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

Bu durumda "n" değerini (String olarak) döndürecektir.


2

Boş bir dizeyi String.split () ile bölmek, boş bir dize içeren tek bir öğe dizisi döndürür . Çoğu durumda, org.apache.commons.lang3.StringUtils.split (str) ile tam olarak elde ettiğiniz gibi, boş bir dizi veya null geçtiyseniz boş bir dizi almayı tercih edersiniz .

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"]

Diğer bir seçenek ise, bir yineleyici ve buna uygun bir liste döndüren google guava Splitter.split () ve Splitter.splitToList () ' dir. Apache sürümünün aksine Splitter, aşağıdakilere bir NPE atar 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

Yineleyici yerine bir liste istiyorsanız, Splitter.splitToList () kullanın .


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

Yöntem String.splitboş 1st üretecek, onu diziden kaldırmanız gerekiyor. Bu sıkıcı.


1

Bu sorunun başlığına dayanarak, buraya bir String'i bir sınırlayıcıyla bölünmüş bir alt dizeler dizisine dönüştürmek isteyerek geldim. Aynı soruyu soran diğer kişiler için de bu yanıtı buraya ekleyeceğim.

Bu, dizeyi her boşlukta bölerek bir dizi kelime oluşturur:

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

Bu, aşağıdaki diziyi oluşturur:

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

Kaynak

Java 8'de test edildi


1

burada split yöntemini kullanarak basit dizeyi dizge dizisine dönüştürmektir.

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

Çıktı

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.