让我们说我需要匹配一个字符串,该字符串包含不适合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?
答案 0 :(得分:0)
没有。 String
对象使用char[]
作为后备结构。大多数String
方法使用该数组中的char
值进行操作。 Matcher
也是如此。它报告匹配模式在底层char[]
的开始和结束位置。