2014-09-27 2 views
6

Я пытаюсь определить, содержит ли строка java японские символы. Так как это не имеет значения для меня, если символы образуют грамматически правильное предложение, я думал, что я хотел бы использовать регулярное выражение, чтобы соответствовать любой японский символ в строке, как так:Обнаружение японских символов в строках Java

package de.cg.javatest; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class JavaTest { 

    public static void main(String[] args) { 
     String aString = "なにげない日々。"; 
     Pattern pat = Pattern.compile("[\\p{InHiragana}]"); 
     Matcher m = pat.matcher(aString); 
     System.out.println(m.matches()); // false 
    } 
} 

Однако оператор печати всегда показывает false. Я попытался изменить шаблон на

[\\p{IsHiragana}] 
[\\p{InHiragana}]+ 

, и я также ввел кодовые точки вручную. Есть что-то, чего я не вижу, или мне нужно принять другой подход?

+2

日 не является хираганой. –

ответ

4

Matcher.matches возвращает true, только если шаблон соответствует всей строке. As Anonymous commented, not all character are Hiragana characters.

Изменив шаблон следующим образом, вы можете проверить, есть ли Hiragana.

Pattern pat = Pattern.compile(".*\\p{InHiragana}.*"); 

Используя Matcher.find, вам не нужно, чтобы изменить шаблон.

Pattern pat = Pattern.compile("\\p{InHiragana}"); // [..] is not needed. 
Matcher m = pat.matcher(aString); 
System.out.println(m.find()); // true 
+0

Большое спасибо за ваш ответ. Возможно, мне следовало бы обратить внимание на описание «Pattern.matches». 'Matcher.find' именно то, что я хотел. – CannibalGorilla

+1

FYI, http://ideone.com/zyGIUm – falsetru

Смежные вопросы