我正在创建一个Android应用程序,其中我有一个字符串。我想检查这个字符串是否包含至少一个属于印地语的字符。
字符串在哪种语言中并不重要,但如果它至少有一个印地语字符,则需要调用我的函数。
这样做的方法之一是将字符串中的每个字符与所有印地语单曲进行比较。但这是不是太费时了?例如,字符串的50个字符和50个unicode将以2500种比较结束。
什么是解决这一问题的最佳方案?
发布于 2016-08-30 11:42:24
我认为这两种方法
方法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;
}
}
发布于 2019-01-08 23:27:22
如果您使用的是java-8,您可以:
boolean isHindi =
myString.chars().anyMatch(c -> Character.UnicodeBlock.of(c) == Character.UnicodeBlock.DEVANAGARI);
发布于 2020-03-16 04:24:59
您也可以进行正则匹配。下面是一个示例代码
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]
是印地语字符的匹配器。
.*
被追加,以便匹配在第一次匹配之后停止。
https://stackoverflow.com/questions/39226036
复制相似问题