如何检测字符串是否包含特定语言的至少一个字符串?

时间:2016-08-30 11:17:21

标签: java android string unicode

我正在创建一个Android应用程序,我有一个字符串。我想检查这个字符串是否包含至少一个属于印地语的字符。

String的语言无关紧要,但如果它至少有一个印地语的字符,则需要调用我的函数。

这样做的一种方法是将字符串的每个字符与印地语的所有unicodes进行比较。但这不是太耗时吗?例如,50个字符串和50个unicode最终将进行2500次比较。

最佳解决方案是什么?

3 个答案:

答案 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]是印地文字符的匹配项。

附加了

.*,以便在首次匹配后停止匹配。