我正在创建一个Android应用程序,我有一个字符串。我想检查这个字符串是否包含至少一个属于印地语的字符。
String的语言无关紧要,但如果它至少有一个印地语的字符,则需要调用我的函数。
这样做的一种方法是将字符串的每个字符与印地语的所有unicodes进行比较。但这不是太耗时吗?例如,50个字符串和50个unicode最终将进行2500次比较。
最佳解决方案是什么?
答案 0 :(得分:4)
我想到了这两种方法
方法1
boolean isHindi = false;
for (char c: myString.toCharArray()) {
if (Character.UnicodeBlock.of(c) == Character.UnicodeBlock.DEVANAGARI) {
isHindi = true;
break;
}
}
方法2
boolean isHindi = false;
for (int k = 0; k < Character.codePointCount(myString, 0, myString.length()); k++) {
int c = myString.codePointAt(k);
if (c >= 0x0900 && c <= 0x097F) { //Hindi uni-codes are within this range
isHindi = true;
break;
}
}
答案 1 :(得分:0)
如果您使用的是Java-8,则可以:
boolean isHindi =
myString.chars().anyMatch(c -> Character.UnicodeBlock.of(c) == Character.UnicodeBlock.DEVANAGARI);
答案 2 :(得分:0)
您还可以进行正则表达式匹配。这是示例代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HindiDetctionDemo {
public static void main(String args[]) {
Pattern hindiFirstCharMatchPattern = Pattern.compile("[\\u0900-\\u097F].*");
Matcher hindiFirstCharMatcher = hindiFirstCharMatchPattern.matcher("ok ");
if(hindiFirstCharMatcher.matches()) {
System.out.println("found");
} else {
System.out.println("could not find.");
}
}
}
关于正则表达式的注意事项
[\u0900-\u097F]
是印地文字符的匹配项。
.*
,以便在首次匹配后停止匹配。