2014-10-14 10 views
12

Utilizzo di Java come rilevare se una stringa contiene caratteri cinesi?Rileva il carattere cinese in java

String chineseStr = "已下架" ; 

if (isChineseString(chineseStr)) { 
    System.out.println("The string contains Chinese characters"); 
}else{ 
    System.out.println("The string contains Chinese characters"); 
} 

Potete per favore aiutarmi a risolvere il problema?

risposta

27

Ora Character.isIdeographic(int codepoint) sarebbe di dire se il valore di codice è un CJKV (cinese, giapponese, coreano e vietnamita) ideogramma.

Più vicino sta usando Character.UnicodeScript.HAN.

Quindi:

System.out.println(containsHanScript("xxx已下架xxx")); 

public static boolean containsHanScript(String s) { 
    for (int i = 0; i < s.length();) { 
     int codepoint = s.codePointAt(i); 
     i += Character.charCount(codepoint); 
     if (Character.UnicodeScript.of(codepoint) == Character.UnicodeScript.HAN) { 
      return true; 
     } 
    } 
    return false; 
} 

O in Java 8:

public static boolean containsHanScript(String s) { 
    return s.codePoints().anyMatch(
      codepoint -> 
      Character.UnicodeScript.of(codepoint) == Character.UnicodeScript.HAN); 
} 
+0

mi piace quello java8 –

+1

isIdeographic() e UnicodeScript sono solo JDK 1.7. Ma nei caratteri come i personaggi ideografici di Consolas sono spesso più o meno due spazi, quindi mostrare un errore carret contando solo i caratteri, che si tratti di un surrogato o meno, funziona bene. –

+0

@ j4nbur53 grazie per menzionare [** Character.isIdeographic (cp) **] (http://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#isIdeographic-int-) , parte di java dal 1.7. –

1

Si può provare con Google API o Language Detection API

Lingua rilevazione API contiene semplice demo. Puoi provarlo prima.

+1

Questo rileva lingue, non i personaggi. –

Problemi correlati