`` String.startsWith () '' yöntemi, durumu yok sayarak nasıl kullanılır?


115

string.startsWith()Yöntemi kullanmak istiyorum ama durumu görmezden geliyorum .

String"Session" a sahip olduğumu startsWithve "sEsSi" üzerinde kullandığımı varsayalım , o zaman geri dönmelidir true.

Bunu nasıl başarabilirim?


5
Bu soruyu kapatmak için hiçbir sebep yoktu. Her neyse, en iyi çözüm, string.regionMatches(true, 0, prefix, 0, prefix.length());her iki dizgiyi de "normalleştirme" maliyetine yol açmayan kullanmaktır .
isapir

@AlexanderAbakumov Fine benden. Doğru cevap yukarıdaki yorumumda yayınlanmıştır. Dizelerin durumunu değiştirmekten çok daha etkilidir. Bir yorumdan ziyade bir cevaba yükseltmek iyi olur.
isapir

Yanıtlar:


98

Test etmeden önce dizinizi standartlaştırmak için toUpperCase()veya kullanın toLowerCase().


8
Buradaki en büyük sorun performanstır. Küçük Dizeler için sorun değil, ama büyük bir diziniz varsa ... Yani ... Sadece 4-10 resmi karakteri karşılaştırmak için 1mb String'de toUpperCase yapacak mısınız?
Dyorgio

4
1mb String'in başlangıç ​​kısmını neden karşılaştırmak istediğimi anlayamasam bile mırıldanma, o zaman sadece 4-10 başlangıç ​​karakteri ilgimi çekiyorsa alt dizeyi kullanıyorum ve sonra normalleştiriyorum ve
Nemesis

3
Bu cevap (ve burada bulunan diğer tüm cevaplar) yanlış. Uygulamasına bakarsanız, kesin olarak geri dönmeden önce Strings'in hem küçük hem de büyük harf sürümlerini String.equalsIgnoreCase()karşılaştırmanız gerektiğini keşfedeceksiniz . Alternatif bir yanıt için stackoverflow.com/a/38947571/14731 adresine bakın . false
Gili

10
Bu yanıt doğru değildir çünkü toLowerCase (), karakterleri değiştirmek için Locale.getDefault () 'u dahili olarak kullanır ve bu yanlış negatiflere yol açabilir. Diyelim ki "İstanbul" u "istanbul" ile karşılaştırmak istiyorsunuz. Türkçede "İ" nin küçük harf karşılığı "ı" dir. Yani bunu yapmaya çalıştığımda "İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())(Yerel, Türk ortamında) bana yanlışlık verecektir.
Mustafa Berkay Mutlu

1
@Nemesis, Bu cevap yanlış, kabul edilen cevabın olması birçok insan için yanıltıcı olabilir. Cevabınızı ve Rohit Jain cevabının bağlantısını düzenler misiniz?
Yüce deve Moha

88

Seçeneklerden biri, her ikisini de küçük veya büyük harfe dönüştürmektir:

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());

Bu yanlış. Bakınız: https://stackoverflow.com/a/15518878/14731


Diğer bir seçenek de, büyük / String#regionMatches()küçük harfe duyarlı eşleme yapılıp yapılmayacağını belirten bir mantıksal argüman alan yöntemi kullanmaktır . Bunu şu şekilde kullanabilirsiniz:

String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5));  // true

Bu bölge olup olmadığını kontrol eder needledizinden 0kadar uzunluğu 5mevcut olan haystackindeks itibaren 0uzunluğu kadar 5ya da değil. İlk argüman, büyük / trueküçük harfe duyarsız eşleştirme yapacağı anlamına gelir.


Ve eğer sadece Regex'in büyük bir hayranıysanız, bunun gibi bir şey yapabilirsiniz:

System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));

(?i) gömülü bayrak, büyük / küçük harf eşleştirmeyi göz ardı etmek içindir.


1
Aslında, 1'den fazla lakh girdisi olan bir tablo olduğunu varsayalım ve tüm bu girdileri ayrıştırmak için belirli bir sütunda bir for döngüsü kullanıyorum ve bunda, yukarıdaki bu küçük harf seçeneğini belirli bir desenle başlayan bir girişi aramak için kullanmaya çalışıyorum. . Yani, bu bir performans sorununa neden oluyor. Bulunan bir eşleşme yoksa, dahili olarak tüm girişleri ayrıştırır, bu da çok zaman alır ve aynı anda küçük harfe dönüştürülür. Peki, performans sorununu çözmek için başka bir seçenek var mı?
Sheetal Bhatewara

@Rohit Jain, aslında bu: System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));uygun bir çözüm değil. Bunu deneyebilirsiniz: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));vm bağımsız değişkenleriyle -Duser.country=TR -Duser.language=tr Bu örnekte Ibüyük harftiri
DPM

3
myString.toLowerCase().startsWith(starting.toLowerCase());

2

bunu dene,

String session = "Session";
if(session.toLowerCase().startsWith("sEsSi".toLowerCase()))

2

Geç kaldığımı biliyorum, ama Apache Commons Lang 3'ten StringUtils.startsWithIgnoreCase () kullanmaya ne dersiniz?

Misal :

StringUtils.startsWithIgnoreCase(string, "start");

Aşağıdaki bağımlılığı pom.xml dosyanıza eklemeniz yeterlidir (Maven'i kullandığınız hipotezini dikkate alarak):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>

0

Kullanabilirsiniz someString.toUpperCase().startsWith(someOtherString.toUpperCase())


-1

Her zaman yapabilirsin

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());

-1

kullanım ve toLowerCase birlikte başlar

bunun gibi

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
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.