您的位置:首页 > 编程语言 > Java开发

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \

2016-07-08 16:07 966 查看
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1

\

^

at java.util.regex.Pattern.error(Pattern.java:1924)

at java.util.regex.Pattern.compile(Pattern.java:1671)

at java.util.regex.Pattern.<init>(Pattern.java:1337)

at java.util.regex.Pattern.compile(Pattern.java:1022)

at java.util.Scanner$1.create(Scanner.java:411)

at java.util.Scanner$1.create(Scanner.java:409)

at sun.misc.LRUCache.forName(LRUCache.java:70)

at java.util.Scanner.useDelimiter(Scanner.java:1195)

at test1.niuke.test(niuke.java:24)

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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)

at org.junit.runners.ParentRunner.run(ParentRunner.java:309)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

public class niuke {

public niuke() {
// TODO Auto-generated constructor stub
}
@Test
public void test(){

Scanner cin=new Scanner("ss d//d /sd\\sd");
cin.useDelimiter("\\");
while(cin.hasNext()){
System.out.println(cin.next());
}
}

}

查看jdk帮助文档可知:userDelimiter函数如下

delimPatter为Patter类型

Patter类:

指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建
Matcher
对象,依照正则表达式,该对象可以与任意
字符序列
匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

因此,典型的调用顺序是

Pattern p = Pattern.[code]compile
("a*b");
Matcher m = p.
matcher
("aaaaab");
boolean b = m.
matches
();[/code]

在仅使用一次正则表达式时,可以方便地通过此类定义
matches
方法。此方法编译

所以:java对字符串处理时将“\\”转换成 \ , 虚拟机将已经转换的 \ 当作正则表达式处理再一次“转义”,所以需要“\\\\”才能转换成 \

修改后的结果:

本文如有错误,希望大家指正,小弟感激不尽
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java