Qual é a melhor e / ou mais fácil maneira de reconhecer se um string.charAt (index) é uma letra ou um número Az em Java sem usar expressões regulares? Obrigado.
Qual é a melhor e / ou mais fácil maneira de reconhecer se um string.charAt (index) é uma letra ou um número Az em Java sem usar expressões regulares? Obrigado.
Respostas:
Character.isDigit(string.charAt(index))
( JavaDoc ) retornará verdadeiro se for um dígito
Character.isLetter(string.charAt(index))
( JavaDoc ) retornará verdadeiro se for uma letra
Character.isLetterOrDigit(string.charAt(index))
para as duas verificações.
Estou procurando uma função que verifique apenas se é uma das letras latinas ou um número decimal. Desde char c = 255
, que na versão imprimível é ├ e considerado como uma carta por Character.isLetter(c)
. Esta função eu acho que é o que a maioria dos desenvolvedores está procurando:
private static boolean isLetterOrDigit(char c) {
return (c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c >= '0' && c <= '9');
}
u00ff
é realmente o caractere ÿ. (Y minúsculo com trema.) O ponto de código que representa ├ é u251c
.
if (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
Como as respostas indicam (se você as examinar com cuidado!), Sua pergunta é ambígua. O que você quer dizer com "uma letra Az" ou um dígito?
Se você deseja saber se um caractere é uma letra ou dígito Unicode , use os métodos Character.isLetter
e Character.isDigit
.
Se você deseja saber se um caractere é uma letra ou dígito ASCII , a melhor coisa a fazer é testar comparando com os intervalos de caracteres 'a' a 'z', 'A' a 'Z' e '0' a '9'.
Observe que todas as letras / dígitos ASCII são letras / dígitos Unicode ... mas existem muitos caracteres / letras Unicode que não são ASCII. Por exemplo, letras acentuadas, cirílico, sânscrito, ...
A solução geral é fazer isso:
Character.UnicodeBlock block = Character.UnicodeBlock.of(someCodePoint);
e teste para ver se o bloco é um do seu interesse. Em alguns casos, você precisará testar vários blocos. Por exemplo, existem (pelo menos) 4 blocos de código para caracteres cirílicos e 7 para latim. A Character.UnicodeBlock
classe define constantes estáticas para blocos conhecidos; veja os javadocs .
Observe que qualquer ponto de código estará no máximo em um bloco.
A classe Java Character possui um método isLetterOrDigit desde a versão 1.0.2
Não sei o que é melhor, mas isso me parece bastante simples:
Character.isDigit(str.charAt(index))
Character.isLetter(str.charAt(index))
// check if ch is a letter
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
// ...
// check if ch is a digit
if (ch >= '0' && ch <= '9')
// ...
// check if ch is a whitespace
if ((ch == ' ') || (ch =='\n') || (ch == '\t'))
// ...
Fonte: https://docs.oracle.com/javase/tutorial/i18n/text/charintro.html
if a string.charAt(index) is an A-z letter
. Então, não estamos falando de outras línguas, estamos?
Compare seu valor. Deve estar entre o valor de 'a' e 'z', 'A' e 'Z', '0' e '9'
Character.isLetter()
método interno?
Character.isLetter()
é rudimentar. A menos que estejamos falando sobre internacionalização?
Use o código abaixo
Character.isLetterOrDigit(string.charAt(index))
import java.util.Scanner;
public class v{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
String str;
int l;
int flag=0;
System.out.println("Enter the String:");
str=in.nextLine();
str=str.toLowerCase();
str=str.replaceAll("\\s","");
char[] ch=str.toCharArray();
l=str.length();
for(int i=0;i<l;i++){
if ((ch[i] >= 'a' && ch[i]<= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z')){
flag=0;
}
else
flag++;
break;
}
if(flag==0)
System.out.println("Onlt char");
}
}