如何在第一次出现数字字符的基础上拆分日文字符串?

时间:2016-11-09 14:51:09

标签: java regex split

我有一个日语字符串,其中包含日语和数字字符。我想根据字符串中第一次出现的数字字符拆分字符串。例如,

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)); 

但它不适用于日文字符。请帮助

1 个答案:

答案 0 :(得分:1)

您可以使用自己的方法使用Pattern.UNICODE_CHARACTER_CLASS标志来识别\d Unicode:Matcher matcher = Pattern.compile("([^\\d]+)(.*)", Pattern.UNICODE_CHARACTER_CLASS).matcher(s);。请参阅Java demo

但是,您可以仅使用split

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

请参阅Java demo

.split("(?U)(?=\\d)", 2)会将您的字符串拆分为2部分(请参阅2参数)并使用(?=\d)支持Unicode的模式(请参阅(?U),{{1嵌入标志选项),匹配数字前的位置(Pattern.UNICODE_CHARACTER_CLASS是一个正向前瞻,只检查右边的模式,但不消耗字符串,因为它是零宽度的组合)。