dizge olarak işlem gören baştaki sıfırları sıyırmak için regex

Sıfırın kaldırılması gereken böyle numaralarım var.

İşte ihtiyacım olan şey:

00000004334300343 -> 4334300343

0003030435243 -> 3030435243

Bunu, normal ifadelerde yeni olduğum için çözemiyorum. Bu çalışmıyor:

(^0)
6

9 cevap

Neredeyse ordasın. Sadece nicelemeye ihtiyacınız var:

str = str.replaceAll("^0+", "");

0'ın 1 veya daha fazla oluşumunun yerini alır ( + niceleyicisi içindir. Benzer şekilde, * niceleyicisine sahibiz, yani 0 veya daha fazlası), Boş dize (dize ( ^ caret tarafından verilir)).

13
katma
burada çalışmaz: regexr.com
katma yazar Horse Voice, kaynak
@KickButtowski Dude, cidden o kısmın bundan daha fazla açıklamaya ihtiyacı yok. String sınıf dokümanlarını okudunuz mu? replaceAll() yönteminin nasıl çalıştığını görün? Sanırım bundan sonra adil bir fikir edineceksin.
katma yazar Rohit Jain, kaynak
@HorseVoice Paylaşılan bağlantıyı muhtemelen gönderebilir misiniz?
katma yazar Rohit Jain, kaynak
@KickButtowski Hangi karakterden bahsediyorsun, bunun kaçması gerekiyor? ^ 0 yalnızca 1 0 ile eşleşir, bundan daha fazlası olmaz.
katma yazar Rohit Jain, kaynak
@MaxZoom, Evet doğru ..
katma yazar Rohit Jain, kaynak
@KickButtowski (^ 0) işe yaramadı çünkü bu regex dizenin başına yerleştirilen yalnızca bir 0 ile eşleşebilir. OP'nin istediği, başlangıçta yerleştirilen birden fazla 0 ile eşleşmektir. Bu, * niceleyicisi ile yapılabilir; bu, sıfır veya daha çok kez görünmeden önce açıklanan öğenin anlamıdır. Ayrıca hangi karakterlerden kaçınmanız gerektiğini düşünüyorsunuz ve neden?
katma yazar Pshemo, kaynak
@KickButtowski Bu cevabın hangi kısmı size açık değil?
katma yazar Pshemo, kaynak
@HorseVoice ancak Java'da çalışıyor: ideone.com/TblPQ7 ve istediğiniz bu değil mi?
katma yazar Pshemo, kaynak
@RohitJain size cevap ve böylece plz öğrenmek ve oy böylece ur ur açıklayabilir miyim?
katma yazar Kick Buttowski, kaynak
ihtiyacımız yok mu? kaçış karakteri? neden ^ 0 çalışmıyor?
katma yazar Kick Buttowski, kaynak
@RohitJain, ur cevabındaki boş dize ile neyi kastediyorsunuz? ur regex'te neden kaçış karakteri kullanılmadı?
katma yazar Kick Buttowski, kaynak
@Rohit Kendinize ikinci sırayı görün burayı
katma yazar MaxZoom, kaynak
İkinci regex herhangi bir dize için eşleneceği ve boş değiştirme yapacağından, regex ^ 0 + değil ^ 0 * olmalıdır.
katma yazar MaxZoom, kaynak

Giriş dizelerinin hepsinde rakam bulunduğunu biliyorsanız, şunları yapabilirsiniz:

String s = "00000004334300343";
System.out.println(Long.valueOf(s));
// 4334300343

Kod Demosu

Long 'a dönüştürüldüğünde, otomatik olarak tüm baştaki sıfırları kaldıracaktır.

3
katma
Evet, bağlantılı demosunu da kontrol edin.
katma yazar anubhava, kaynak
Diğer cevaplar için kaçış arabasına ihtiyacımız yok mu?
katma yazar Kick Buttowski, kaynak
yani. sıfırları yok sayar mı?
katma yazar Kick Buttowski, kaynak
Regex'te kaçacak özel bir karakter yok
katma yazar MaxZoom, kaynak

Giriş dizelerinin hepsinde rakam bulunduğunu biliyorsanız, şunları yapabilirsiniz:

String s = "00000004334300343";
System.out.println(Long.valueOf(s));
// 4334300343

Kod Demosu

Long 'a dönüştürüldüğünde, otomatik olarak tüm baştaki sıfırları kaldıracaktır.

3
katma
Evet, bağlantılı demosunu da kontrol edin.
katma yazar anubhava, kaynak
Diğer cevaplar için kaçış arabasına ihtiyacımız yok mu?
katma yazar Kick Buttowski, kaynak
yani. sıfırları yok sayar mı?
katma yazar Kick Buttowski, kaynak
Regex'te kaçacak özel bir karakter yok
katma yazar MaxZoom, kaynak

Başka bir çözüm (okumak daha sezgisel olabilir)

str = str.replaceFirst("^0+", "");

^ - match the beginning of a line
0+ - match the zero digit character one or more times

Yorucu bir model listesi burada bulabilirsiniz/a>.

2
katma
senin cevap plz açıklayabilir misiniz?
katma yazar Kick Buttowski, kaynak

Başka bir çözüm (okumak daha sezgisel olabilir)

str = str.replaceFirst("^0+", "");

^ - match the beginning of a line
0+ - match the zero digit character one or more times

Yorucu bir model listesi burada bulabilirsiniz/a>.

2
katma
senin cevap plz açıklayabilir misiniz?
katma yazar Kick Buttowski, kaynak

Baştaki sıfırları sıyırmak için doğru regex

str = str.replaceAll("^0+", "");

Bu regex, dize başında 0 karakteriyle bir ve daha fazla miktarında eşleşir. Regex'in ^ (giriş başlangıcı) özel bir karaktere sahip olduğundan, değiştirme işleminin yalnızca bir kez çağrılacağını garanti eden replaceAll yöntemi hakkında endişelenmeniz için bir neden yoktur.

Ultimately you can use Java build-in feature to do the same:

String str = "00000004334300343";
long number = Long.parseLong(str);
// outputs 4334300343

Baştaki sıfırlar sizin için otomatik olarak sıyrılacaktır.

1
katma

Baştaki sıfırları sıyırmak için doğru regex

str = str.replaceAll("^0+", "");

Bu regex, dize başında 0 karakteriyle bir ve daha fazla miktarında eşleşir. Regex'in ^ (giriş başlangıcı) özel bir karaktere sahip olduğundan, değiştirme işleminin yalnızca bir kez çağrılacağını garanti eden replaceAll yöntemi hakkında endişelenmeniz için bir neden yoktur.

Ultimately you can use Java build-in feature to do the same:

String str = "00000004334300343";
long number = Long.parseLong(str);
// outputs 4334300343

Baştaki sıfırlar sizin için otomatik olarak sıyrılacaktır.

1
katma

\b0+\B will do the work. See demo \b anchors your match to a word boundary, it matches a sequence of one or more zeros 0+, and finishes not in a word boundary (to not eliminate the last 0 in case you have only 00...000)

0
katma

\b0+\B will do the work. See demo \b anchors your match to a word boundary, it matches a sequence of one or more zeros 0+, and finishes not in a word boundary (to not eliminate the last 0 in case you have only 00...000)

0
katma