Les*_*iak 5 java regex unicode
我知道这是一个极端的情况,但是我遇到了一个使用正则表达式且组数可变的代码
根据文档,这是合法的:
与组关联的捕获输入始终是该组最近匹配的子序列。如果由于量化而对组进行第二次评估,则如果第二次评估失败,则先前保留的值(如果有)将保留。例如,将字符串“ aba”与表达式(a(b)?)+匹配,则将第二组设置为“ b”。在每次比赛开始时,所有捕获的输入都会被丢弃。
但是,当我尝试将其与unicode符号“带有笑脸的咧嘴笑脸”(U + 1F601)一起使用时,出现StringIndexOutOfBoundsException。
根据规范或错误是预期的吗?
这是测试代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestEmoji {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("(A.)* EEE");
testGroups(pattern, "ACAB EEE");
testGroups(pattern, "ABACA\uD83D\uDE01");
}
public static void testGroups(Pattern pattern, String s) {
Matcher matcher = pattern.matcher(s);
if (matcher.matches()) {
System.out.println("matches");
System.out.println(matcher.groupCount());
for (int i = 1; i <= matcher.groupCount(); ++i) {
System.out.println(matcher.group(i));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
和例外:
matches
1
AB
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -2
at java.lang.String.charAt(String.java:658)
at java.util.regex.Pattern$Slice.match(Pattern.java:3867)
at java.util.regex.Pattern$GroupCurly.match0(Pattern.java:4382)
at java.util.regex.Pattern$GroupCurly.match0(Pattern.java:4354)
at java.util.regex.Pattern$GroupCurly.match(Pattern.java:4304)
at java.util.regex.Matcher.match(Matcher.java:1221)
at java.util.regex.Matcher.matches(Matcher.java:559)
at TestEmoji.testGroups(TestEmoji.java:19)
at TestEmoji.main(TestEmoji.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Run Code Online (Sandbox Code Playgroud)
经过对 Java Bugs 数据库的一些挖掘,我发现了它:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8007395
JDK-8007395:当输入字符串包含代理 UTF-16 字符时,Match.find() 中出现 StringIndexOutofBoundsException
| 归档时间: |
|
| 查看次数: |
1157 次 |
| 最近记录: |