Eu quero usar o string.startsWith()
método, mas ignorando o caso.
Suponha que eu tenha String
"Session" e use startsWith
"sEsSi", então ele deve retornar true
.
Como posso conseguir isso?
Eu quero usar o string.startsWith()
método, mas ignorando o caso.
Suponha que eu tenha String
"Session" e use startsWith
"sEsSi", então ele deve retornar true
.
Como posso conseguir isso?
Respostas:
Use toUpperCase()
ou toLowerCase()
para padronizar sua string antes de testá-la.
String.equalsIgnoreCase()
, descobrirá que precisa comparar as versões em maiúsculas e minúsculas das Strings antes de retornar de forma conclusiva false
. Consulte stackoverflow.com/a/38947571/14731 para obter uma resposta alternativa.
"İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())
(em um ambiente Locale.Turkish), ele me retorna falso.
Uma opção é convertê-los em letras minúsculas ou maiúsculas:
"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
Isto está errado. Veja: https://stackoverflow.com/a/15518878/14731
Outra opção é usar o String#regionMatches()
método, que recebe um argumento booleano informando se deve ser feita correspondência com distinção entre maiúsculas e minúsculas ou não. Você pode usá-lo assim:
String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5)); // true
Ele verifica se a região needle
do índice 0
até o comprimento 5
está presente no haystack
início do índice 0
até o comprimento 5
ou não. O primeiro argumento é true
, significa que fará correspondência sem distinção entre maiúsculas e minúsculas.
E se você for um grande fã da Regex , você pode fazer algo assim:
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
(?i)
sinalizador incorporado é para ignorar correspondência de maiúsculas e minúsculas.
System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));
não é uma solução adequada. Você pode tentar isto: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));
com argumentos vm -Duser.country=TR -Duser.language=tr
Neste exemplo, o I
está em maiúsculasi
tente isso,
String session = "Session";
if(session.toLowerCase().startsWith("sEsSi".toLowerCase()))
Eu sei que estou atrasado, mas que tal usar StringUtils.startsWithIgnoreCase () do Apache Commons Lang 3?
Exemplo:
StringUtils.startsWithIgnoreCase(string, "start");
Basta adicionar a seguinte dependência ao seu arquivo pom.xml (assumindo a hipótese de que você usa o Maven):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
Você pode usar someString.toUpperCase().startsWith(someOtherString.toUpperCase())
string.regionMatches(true, 0, prefix, 0, prefix.length());
que não acarreta o custo de "normalizar" as duas strings.