dizeyi yalnızca ilk örnekte bölme - java


145

Bir dizeyi '=' karakter ile bölmek istiyorum. Ama sadece ilk aşamada bölünmesini istiyorum. Bunu nasıl yapabilirim ? İşte '_' char için bir JavaScript örneği, ancak benim için çalışmıyor karakter dizisinin yalnızca ilk örneğinde bölünmüş dize

Misal :

apple=fruit table price=5

String.split ('='); o verir

[apple],[fruit table price],[5]

Ama ihtiyacım var

[apple],[fruit table price=5]

Teşekkürler


Kaçmaya gerek yok =.
Rohit Jain

Yanıtlar:


282
string.split("=", 2);

As String.split(java.lang.String regex, int limit)açıklıyor:

Bu yöntemle döndürülen dizi, bu ifadenin verilen ifadeyle eşleşen başka bir alt dize tarafından sonlandırılan veya dizenin sonuna kadar sonlandırılan her dize alt dizesini içerir. Dizideki alt dizeler, bu dizede gerçekleştikleri sıradadır. İfade girişin herhangi bir bölümüyle eşleşmezse, sonuçta oluşan dizinin yalnızca bir öğesi, yani bu dize vardır.

limitParametre desen uygulandığında sayısını kontrol eder ve bu nedenle elde edilen dizinin uzunluğunu da etkiler. N sınırı sıfırdan büyükse, desen en fazla n - 1 kez uygulanır , dizinin uzunluğu n'den büyük olmaz ve dizinin son girdisi son eşleşen sınırlayıcının ötesindeki tüm girdileri içerir.

boo:and:fooÖrneğin, dize bu parametrelerle aşağıdaki sonuçları verir:

Regex Limit    Result
:     2        { "boo", "and:foo" }
:     5        { "boo", "and", "foo" }
:    -2        { "boo", "and", "foo" }
o     5        { "b", "", ":and:f", "", "" }
o    -2        { "b", "", ":and:f", "", "" }
o     0        { "b", "", ":and:f" }

1
Anlamak kafa karıştırıcı ama işe yarıyor! Teşekkürler!
Clint Eastwood

4
Bazı açıklamalar: Limit 2, AT MOST 2 öğelerinin bir listesini döndürecektir. İfadeyle hiçbir eşleşme yoksa 1 öğeden oluşan bir liste döndürebilir. İfadeyle 2 eşleşme varsa, döndürülen dizinin ikinci öğesi bölünmez.
modle13


5

Diğer birçok yanıtın sınır yaklaşımını önerdiği gibi, Bu başka bir yol olabilir

Dizede, verilen karakterin ilk Oluşumunu döndürecek indexOf yöntemini kullanabilirsiniz, bu dizini kullanarak istediğiniz çıktıyı alabilirsiniz

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));

2
Bu bölünmez ancak ikinci kısmı çıkarır. İlk kısmı almak için başka bir kod satırı gerekir ... 4 satır vs 1 = başparmak aşağı
Clint Eastwood

0

Bu Kodu Deneyin ...

İşe yarıyor.

public class Split
{
    public static void main(String...args)
    {
        String a = "%abcdef&Ghijk%xyz";
        String b[] = a.split("%", 2);

        System.out.println("Value = "+b[1]);
    }
}

0
String string = "This is test string on web";
String splitData[] = string.split("\\s", 2);

Result ::
splitData[0] =>  This
splitData[1] =>  is test string  


String string = "This is test string on web";
String splitData[] = string.split("\\s", 3);

Result ::
splitData[0] =>  This
splitData[1] =>  is
splitData[1] =>  test string on web

Varsayılan olarak split yöntemi verilen regex temelinde n sayı dizisi oluşturur. Ancak, bölünmeden sonra oluşturulacak dizi sayısını sınırlamak istiyorsanız, ikinci bağımsız değişkeni bir tamsayı bağımsız değişkeni olarak geçirin.


3
Problem neydi? Cevabınızı açıklayıcı hale getirmek için daha fazla ayrıntı ekleyin!
Paresh Mayani

-2
String[] func(String apple){
String[] tmp = new String[2];
for(int i=0;i<apple.length;i++){
   if(apple.charAt(i)=='='){
      tmp[0]=apple.substring(0,i);
      tmp[1]=apple.substring(i+1,apple.length);
      break;
   }
}
return tmp;
}
//returns string_ARRAY_!

kendi yöntemlerini yazmayı seviyorum :)


3
Ayırıcı sabit kodlanmış olduğu için bu yöntem çok kullanışlı değildir. Ayrıca, for-loop ile doğrusal aramanın uygulanması, ilk ayırıcının yerini bulmak için String.indexOf komutunun kullanılmasına göre bir avantaj sağlamaz. Üçüncü olarak, kaç String öğesinin döndürüldüğünü görmek sezgisel değildir. İşleri ikiye bölmekten bahsederken, bir dizi oluşturmak yerine tam olarak iki dizeyi temsil eden Pair <String, String> veri türünü kullanmayı düşünün.
Gee Bee
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.