需要判断一个字符是否是英文字母和数字,发现Character有个方法叫 isLetterOrDigit ,没多想拿来就用了,结果出来问题。
仔细看一下文档或者源代码就能发现这里的Letter不只是指英文字母。事实上任何语言的‘字符’都可以。可以看看例子
for(char c='/u4E00';c<='/u9FA5';c++){
if(!Character.isLetter(c)){
System.out.println("汉字是Letter");
}else{
System.out.println("汉字不是Letter");
}
}
System.out.println(Character.isLetter('さ'));
System.out.println((int)'さ');
System.out.println(Character.isDigit('/u0660'));
System.out.println('/u0660');
可以看到汉字和日文字符都是Letter,另外Digit也类似,不只是0-9是Digit,比如/u0660,好像是阿拉伯文,也是Digit
所以要判断英文字母或者数字还是笨一点, c>='a'&&c<='z' || c>='A'&&c<='Z'吧。