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

Java regex logical number of matched characters

假设我需要匹配一个字符串,其中包含不适合 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 正则表达式匹配器到 return 1 这里?

没有。 String 对象使用 char[] 作为支持结构。大多数 String 方法使用该数组中的 char 值进行操作。 Matcher 做同样的事情。它报告匹配模式相对于基础 char[].

的开始和结束位置