Jaki jest najlepszy i / lub najłatwiejszy sposób na rozpoznanie, czy string.charAt (indeks) jest literą Az czy liczbą w Javie bez używania wyrażeń regularnych? Dzięki.
Jaki jest najlepszy i / lub najłatwiejszy sposób na rozpoznanie, czy string.charAt (indeks) jest literą Az czy liczbą w Javie bez używania wyrażeń regularnych? Dzięki.
Odpowiedzi:
Character.isDigit(string.charAt(index))
( JavaDoc ) zwróci wartość true, jeśli jest to cyfra
Character.isLetter(string.charAt(index))
( JavaDoc ) zwróci wartość true, jeśli jest to litera
Character.isLetterOrDigit(string.charAt(index))
do obu weryfikacji.
Szukam funkcji, która sprawdza tylko, czy jest to jedna z liter łacińskich, czy liczba dziesiętna. Ponieważ char c = 255
, który w wersji do druku to ├ i jest traktowany jako litera wg Character.isLetter(c)
. Myślę, że ta funkcja jest tym, czego szuka większość programistów:
private static boolean isLetterOrDigit(char c) {
return (c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c >= '0' && c <= '9');
}
u00ff
jest właściwie znak ÿ. (Małe y z umlautem). Punkt kodowy reprezentujący ├ to u251c
.
if (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
Jak wskazują odpowiedzi (jeśli dokładnie je przeanalizujesz!), Twoje pytanie jest niejednoznaczne. Co masz na myśli przez „literę Az” lub cyfrę?
Jeśli chcesz wiedzieć, czy znak jest literą czy cyfrą Unicode , użyj metod Character.isLetter
i Character.isDigit
.
Jeśli chcesz wiedzieć, czy znak jest literą lub cyfrą ASCII , najlepszym rozwiązaniem jest porównanie z zakresami znaków „a” do „z”, „A” do „Z” i „0” do „9”.
Zauważ, że wszystkie litery / cyfry ASCII są literami / cyframi Unicode ... ale istnieje wiele znaków / cyfr Unicode, które nie są znakami ASCII. Na przykład litery akcentowane, cyrylica, sanskryt, ...
Ogólnym rozwiązaniem jest zrobienie tego:
Character.UnicodeBlock block = Character.UnicodeBlock.of(someCodePoint);
a następnie sprawdź, czy dany blok jest jednym z tych, które Cię interesują. W niektórych przypadkach będziesz musiał przetestować wiele bloków. Na przykład istnieją (co najmniej) 4 bloki kodu dla znaków cyrylicy i 7 dla znaków łacińskich. Character.UnicodeBlock
Klasa definiuje statyczne stałe dla dobrze znanych bloków; zobacz javadocs .
Zauważ, że każdy punkt kodowy będzie znajdował się co najwyżej w jednym bloku.
Klasa znaków Java ma metodę isLetterOrDigit od wersji 1.0.2
Nie wiem, co najlepsze, ale wydaje mi się to dość proste:
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'))
// ...
Źródło: https://docs.oracle.com/javase/tutorial/i18n/text/charintro.html
if a string.charAt(index) is an A-z letter
. Więc nie mówimy o innych językach, prawda?
Porównaj jego wartość. Powinien zawierać się między wartościami „a” i „z”, „A” i „Z”, „0” i „9”
Character.isLetter()
metoda wbudowana ?
Character.isLetter()
jest elementarny. Chyba że mówimy o internacjonalizacji?
Użyj poniższego kodu
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");
}
}