私はstring.startsWith()
メソッドを使用したいが、大文字小文字を無視します。
String
「Session」がありstartsWith
、「sEsSi」で使用すると仮定すると、が返されtrue
ます。
どうすればこれを達成できますか?
私はstring.startsWith()
メソッドを使用したいが、大文字小文字を無視します。
String
「Session」がありstartsWith
、「sEsSi」で使用すると仮定すると、が返されtrue
ます。
どうすればこれを達成できますか?
回答:
テストする前に、toUpperCase()
またはtoLowerCase()
を使用して文字列を標準化します。
String.equalsIgnoreCase()
を比較する必要があることがわかります。別の回答については、stackoverflow.com / a / 38947571/14731を参照してください。false
"İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())
(Locale.Turkish環境で)それを行おうとすると、誤った結果になります。
1つのオプションは、両方を小文字または大文字に変換することです。
"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
これは間違っています。参照:https : //stackoverflow.com/a/15518878/14731
別のオプションは、String#regionMatches()
大文字と小文字を区別するマッチングを行うかどうかを示すブール引数を取るメソッドを使用することです。次のように使用できます。
String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5)); // true
それはの領域かどうかをチェックするneedle
インデックスから0
までの長さ5
で存在するhaystack
インデックスから始まる0
長さまで5
、またはしません。最初の引数はでtrue
、大文字と小文字を区別しないマッチングを行います。
そして、あなただけがRegexの大ファンであるなら、あなたはこのようなことをすることができます:
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
(?i)
埋め込まれたフラグは、大文字小文字の区別を無視するためのものです。
System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));
は適切な解決策ではありません。これを試すことができます: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));
vm引数を使用-Duser.country=TR -Duser.language=tr
この例でI
は大文字ですi
私は遅れていることを知っていますが、Apache Commons Lang 3のStringUtils.startsWithIgnoreCase()を使用するのはどうですか?
例:
StringUtils.startsWithIgnoreCase(string, "start");
次の依存関係をpom.xmlファイルに追加するだけです(Mavenを使用するという仮説を取ります)。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
string.regionMatches(true, 0, prefix, 0, prefix.length());
両方の文字列を「正規化」するコストが発生しない方法を使用することです。