如何在Java字符串中找到第一个中文字符

4
如何在Java字符串中找到第一个汉字 示例:
String str = "xing 杨某某";

如何在上述字符串中获取第一个汉字“杨”的索引。 感谢!

它不能完全解决您的问题,但您可以迭代字符,检查那些非ASCII码并查看这些是否落在此处描述的范围内:https://dev59.com/nHM_5IYBdhLWcg3wdy_z#11415841,但CJK字符不只是中文。对于您的情况是否足够接近? - CptBartender
谢谢您的建议! - star
2个回答

10

这可能会有所帮助:

public static int firstChineseChar(String s) {
    for (int i = 0; i < s.length(); ) {
        int index = i;
        int codepoint = s.codePointAt(i);
        i += Character.charCount(codepoint);
        if (Character.UnicodeScript.of(codepoint) == Character.UnicodeScript.HAN) {
            return index;
        }
    }
    return -1;
}

OP 要求的是索引,而不是字符。但这只是一个小改变。 - king_nak
1
太棒了。你能否简单解释一下代码背后的魔法? - Sayakiss
@Sayakiss:当然,这里没有什么“魔法”! :) 在每次迭代中,它都会检查当前字符的Unicode值,然后(使用Character.UnicodeScript-https://docs.oracle.com/javase/7/docs/api/java/lang/Character.UnicodeScript.html),它会检查该Unicode值是否在HAN集合中。 - Andrea

2

在您的情况下,您有四个ASCII字符,然后是其他的中文字符,因此您可以使用for循环检查当一个字符不再是ASCII时。

所以,如果字符与ASCII不同,则在这种情况下,它是一个中文字符。

for(int i = 0; i < str.length(); i++) {
    char c = str.charAt(i);
    int char = (int) c;
    if(char < 0 || char > 255) // Is not ascii
    System.out.println("The first chinese char is: " + str.charAt(i);
 }

非常有帮助的答案,谢谢! - star
这并不完美。如果有一个以日语或韩语字符开头的字符串会怎样呢? - Jackson Ming Hu
只有当字符串包含英文或中文时才能工作。 - Satish Patro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接