Java正则表达式匹配字符的逻辑数量

时间:2015-01-23 16:46:56

标签: java regex unicode

让我们说我需要匹配一个字符串,该字符串包含不适合16位的字符,并由Java中的高低代理对处理。例如pizza slice字符。

我已经编写了以下代码来匹配它:

Pattern pattern = Pattern.compile("\uD83C\uDF55");
String s = "\uD83C\uDF55";
Matcher matcher = pattern.matcher(s);
matcher.find();
System.out.println(matcher.end());

令我惊讶的是输出是2而不是1,因为逻辑上有一个字符。有没有办法告诉Java正则表达式匹配器在这里返回1?

1 个答案:

答案 0 :(得分:0)

没有。 String对象使用char[]作为后备结构。大多数String方法使用该数组中的char值进行操作。 Matcher也是如此。它报告匹配模式在底层char[]的开始和结束位置。