Qual è il modo migliore e / o più semplice per riconoscere se una stringa.charAt (indice) è una lettera Az o un numero in Java senza utilizzare espressioni regolari? Grazie.
Qual è il modo migliore e / o più semplice per riconoscere se una stringa.charAt (indice) è una lettera Az o un numero in Java senza utilizzare espressioni regolari? Grazie.
Risposte:
Character.isDigit(string.charAt(index))
( JavaDoc ) restituirà true se è una cifra
Character.isLetter(string.charAt(index))
( JavaDoc ) restituirà true se è una lettera
Character.isLetterOrDigit(string.charAt(index))
per entrambe le verifiche.
Sto cercando una funzione che controlli solo se è una delle lettere latine o un numero decimale. Poiché char c = 255
, che nella versione stampabile è ├ e considerato come una lettera di Character.isLetter(c)
. Questa funzione penso sia ciò che la maggior parte degli sviluppatori sta cercando:
private static boolean isLetterOrDigit(char c) {
return (c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c >= '0' && c <= '9');
}
u00ff
è in realtà il carattere ÿ. (Y minuscola con dieresi.) Il codepoint che rappresenta ├ è u251c
.
if (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
Come indicano le risposte (se le esamini attentamente!), La tua domanda è ambigua. Cosa intendi per "una lettera Az" o una cifra?
Se vuoi sapere se un carattere è una lettera o una cifra Unicode , usa i metodi Character.isLetter
e Character.isDigit
.
Se vuoi sapere se un carattere è una lettera o una cifra ASCII , la cosa migliore da fare è provare confrontando con gli intervalli di caratteri da "a" a "z", "A" a "Z" e "0" a '9'.
Nota che tutte le lettere / cifre ASCII sono lettere / cifre Unicode ... ma ci sono molte lettere / cifre Unicode caratteri che non sono ASCII. Ad esempio, lettere accentate, cirillico, sanscrito, ...
La soluzione generale è fare questo:
Character.UnicodeBlock block = Character.UnicodeBlock.of(someCodePoint);
e poi prova per vedere se il blocco è uno di quelli che ti interessano. In alcuni casi dovrai testare più blocchi. Ad esempio, ci sono (almeno) 4 blocchi di codice per i caratteri cirillici e 7 per il latino. La Character.UnicodeBlock
classe definisce costanti statiche per blocchi noti; vedere i javadoc .
Notare che qualsiasi punto di codice sarà al massimo in un blocco.
La classe Java Character ha un metodo isLetterOrDigit dalla versione 1.0.2
Non so cosa sia meglio, ma questo mi sembra piuttosto semplice:
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
. Quindi non stiamo parlando di altre lingue, vero?
Confronta il suo valore. Dovrebbe essere compreso tra il valore di "a" e "z", "A" e "Z", "0" e "9"
Character.isLetter()
metodo integrato ?
Character.isLetter()
rudimentale. A meno che non si parli di internazionalizzazione?
Usa il codice sottostante
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");
}
}