Android Split dizesi


227

Ben denilen bir dize var CurrentStringve böyle bir şey şeklinde "Fruit: they taste good".
Ben ayırıcı olarak CurrentStringkullanarak bölmek istiyorum :.
Böylece kelime "Fruit"kendi dizesine bölünecek ve "they taste good"başka bir dize olacaktır.
Ve sonra sadece bu dizeyi görüntülemek için SetText()2 farklı kullanmak istiyorum TextViews.

Buna yaklaşmanın en iyi yolu ne olurdu?


Muhtemelen düzenli ifadeleri okumaya çalışabilirsiniz. Onlar da iyi çalışıyor.
Shouvik

10
@Falmarri - Programlama ile ilgili herhangi bir benzersiz soru Stack Overflow'da kabul edilir.
Tim Post

Yanıtlar:


607
String currentString = "Fruit: they taste good";
String[] separated = currentString.split(":");
separated[0]; // this will contain "Fruit"
separated[1]; // this will contain " they taste good"

İkinci Dize'deki alanı kaldırmak isteyebilirsiniz:

separated[1] = separated[1].trim();

Dizeyi dot (.) Gibi özel bir karakterle bölmek istiyorsanız, noktadan önce \ escape karakterini kullanmalısınız.

Misal:

String currentString = "Fruit: they taste good.very nice actually";
String[] separated = currentString.split("\\.");
separated[0]; // this will contain "Fruit: they taste good"
separated[1]; // this will contain "very nice actually"

Bunu yapmanın başka yolları da var. Örneğin, StringTokenizer(from java.util) sınıfını kullanabilirsiniz :

StringTokenizer tokens = new StringTokenizer(currentString, ":");
String first = tokens.nextToken();// this will contain "Fruit"
String second = tokens.nextToken();// this will contain " they taste good"
// in the case above I assumed the string has always that syntax (foo: bar)
// but you may want to check if there are tokens or not using the hasMoreTokens method

Bunun için teşekkürler! Yeni bir Time nesnesi oluştururken saat ve dakikayı ayırmak için de kullanışlıdır.
çalıştı

24
Teşekkür ederim! .split () yöntemi Android'de hiç çalışmıyor! StringTokenizeris iyi çalışıyor.
Ayush Pateria

Evet öyle ... hangi problemlerin var?
Cristian

android bölünmüş basit bir dize bölücü yerine normal bir ifade alır.
htafoya

1
@HardikParmar etPhoneNo.getText().toString().replaceAll("\\D", "");, rakam olmayan her şeyin yerini aldığını söylüyor
MilapTank

86

.split yöntemi çalışır, ancak normal ifadeler kullanır. Bu örnekte (Cristian'den çalmak) olurdu:

String[] separated = CurrentString.split("\\:");
separated[0]; // this will contain "Fruit"
separated[1]; // this will contain " they taste good"

Ayrıca, bu geldi: Android bölünmesi düzgün çalışmıyor


52

virgülle android bölünmüş dize

String data = "1,Diego Maradona,Footballer,Argentina";
String[] items = data.split(",");
for (String item : items)
{
    System.out.println("item = " + item);
}

25
     String s = "having Community Portal|Help Desk|Local Embassy|Reference Desk|Site News";
     StringTokenizer st = new StringTokenizer(s, "|");
        String community = st.nextToken();
        String helpDesk = st.nextToken(); 
        String localEmbassy = st.nextToken();
        String referenceDesk = st.nextToken();
        String siteNews = st.nextToken();

22

Android'e özgü TextUtils.split () yöntemini de göz önünde bulundurmak isteyebilirsiniz .

TextUtils.split () ve String.split () arasındaki fark TextUtils.split () ile belgelenmiştir:

String.split (), bölünecek dize boş olduğunda [''] döndürür. Bu [] döndürür. Bu, sonuçtaki boş dizeleri kaldırmaz.

Bunu daha doğal bir davranış olarak görüyorum. Özünde TextUtils.split () yöntemi, String.split () için özel olarak boş dize kasasıyla ilgilenen ince bir pakettir. Yöntemin kodu aslında oldukça basittir.


Yalnızca split () öğesini doğrudan dizede çağırmak yerine TextUtils.split () yöntemini kullanmanın faydası nedir?
nibarius

TextUtils.split () ve String.split ()
gardarh

Teşekkürler, aslında TextUtils.split () belgelerini okudum ama nedense bu ayrıntıyı kaçırdım. Sanırım aslında ne dediğini anlamaktan yoruldum.
nibarius

0

Dize s = "Dize ="

String [] str = s.split ("="); // şimdi str [0] "merhaba" ve str [1] "goodmorning, 2,1"

bu dizeyi ekle

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.