2016-11-09 9 views
1

日本語と数字の両方を含む日本語の文字列を持っています.iは、文字列中の数字の最初の出現に基づいて文字列を分割したいと考えています。たとえば、数字の最初の出現に基づいて日本語の文字列を分割する方法は?

String value = "上目黒1丁目2-3"; 
after split 
value1 = "上目黒; 
value2 = "1丁目2-3"; 

次のコードを使用してこれを実現できます。

String s = "abc1w2"; 
    Matcher matcher = Pattern.compile("([^\\d]+)(.*)").matcher(s); 
    if (matcher.matches()) { 
     System.out.println(matcher.group(1).trim()); 
     System.out.println("sep"); 
     System.out.println(matcher.group(2)); 

しかし、それは日本のcharacters.Pleaseの助けのために働いていない

答えて

1

あなたが意識\d Unicodeを行いますPattern.UNICODE_CHARACTER_CLASSフラグを使用して独自のアプローチで使用することができます:Matcher matcher = Pattern.compile("([^\\d]+)(.*)", Pattern.UNICODE_CHARACTER_CLASS).matcher(s);を。 Java demoを参照してください。

String value = "上目黒1丁目2-3"; 
String[] res = value.split("(?U)(?=\\d)", 2); 
System.out.println(Arrays.toString(res)); 

.split("(?U)(?=\\d)", 2)は、2つの部分にあなたの文字列を分割しますJava demo

(?=\d) Unicode対応のパターンで( 2引数を参照)を参照してください:

ただし、単なるsplitを使用することができます(?U)Pattern.UNICODE_CHARACTER_CLASS埋め込みフラグオプションを参照)、数字の前の場所に一致します((?=....)は、右のパターンのみをチェックする肯定先読みですが、文字列をiとして消費しません)。 tはゼロ幅のアセットである)。

+1

おかげで多くの仲間...それは働く... :) – user2142786

関連する問題