我有一个日语字符串,其中包含日语和数字字符。我想根据字符串中第一次出现的数字字符拆分字符串。例如,
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));
但它不适用于日文字符。请帮助
答案 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
是一个正向前瞻,只检查右边的模式,但不消耗字符串,因为它是零宽度的组合)。