- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当用户输入包含 Unicode 字符(例如 ' 或 ” )时,以下操作将失败:
String[] unicodeStrings = answerText.split("((?<=\\R)|(?=\\R))");
我尝试过调试 split 方法,但没有找到根本原因。我有预感这与表达式中的问号(?)有关。
我还尝试了在线 java 正则表达式工具,并将表达式应用于具有以下字符 ‘” 的某些文本。没有显示任何错误。
我还尝试在在线java编译器中编写一个简单的测试方法,其中我传递了带有‘”字符的测试字符串并执行了上述拆分。也没有错误。
代码:
String answerText = uiq.getAnswerText();
if (answerText.matches("[\\x00-\\x7F]*")) //if the answerString consists only of ascii characters we encode it
sb.append("<String name=\"answerText\">")
.append(wrapCdata(uiq.isDate() ? formatDate(uiq.getAnswerText(), sourceFormat, targetFormat) : answerText)).append("</String>");
else { //if the answerString consists of unicode characters we encode only the Linebreakers (the \R)
String answerNonEscapedText = "";
String[] unicodeStrings = answerText.split("((?<=\\R)|(?=\\R))");//This regex splits the string to its linebreak-delimiters, including them. i.e. ("$$$\r\n" ---> [$,$,$,\r\n])
for (String str : unicodeStrings) {
if (str.matches("\\R"))
str = StringEscapeUtils.escapeJava(str);
answerNonEscapedText += str;
}
错误:
java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 6
((?<=\R)|(?=\R))
^
at java.util.regex.Pattern.error(Pattern.java:1924)
at java.util.regex.Pattern.escape(Pattern.java:2416)
at java.util.regex.Pattern.atom(Pattern.java:2164)
at java.util.regex.Pattern.sequence(Pattern.java:2046)
at java.util.regex.Pattern.expr(Pattern.java:1964)
at java.util.regex.Pattern.group0(Pattern.java:2807)
at java.util.regex.Pattern.sequence(Pattern.java:2018)
at java.util.regex.Pattern.expr(Pattern.java:1964)
at java.util.regex.Pattern.group0(Pattern.java:2854)
at java.util.regex.Pattern.sequence(Pattern.java:2018)
at java.util.regex.Pattern.expr(Pattern.java:1964)
at java.util.regex.Pattern.compile(Pattern.java:1665)
at java.util.regex.Pattern.<init>(Pattern.java:1337)
at java.util.regex.Pattern.compile(Pattern.java:1022)
at java.lang.String.split(String.java:2313)
at java.lang.String.split(String.java:2355)
您能帮我找出失败的根本原因吗?
最佳答案
String answerText = uiq.getAnswerText();
if (answerText.matches("[\\x00-\\x7F]*")) {
sb.append("<String name=\"answerText\">")
.append(wrapCdata(uiq.isDate()
? formatDate(uiq.getAnswerText(), sourceFormat, targetFormat)
: answerText))
.append("</String>");
} else {
String[] unicodeStrings = answerText.split("\\R"); // Splits on linebreaks.
// This looses the exact line delimiter.
String answerNonEscapedText = ""; // Better StringBuilder too.
for (String str : unicodeStrings) {
answerNonEscapedText += str + "\\r\\n";
}
对于某些情况,上述原始行分隔符的丢失很重要:存在 CSV,其中字段值可能包含行分隔符 \n
而行以 \r\n
。或者这样。
更简单的解决方案:
// Java >= 9
String answerText = Pattern.compile("\\R").matcher(uiq.getAnswerText())
.replaceAll(mr -> StringEscapeUtils.escapeJava(mr.group()));
// Java < 9 (only for \r and \n)
String answerText = uiq.getAnswerText()
.replace("\r", "\\r").replace("\n", "\\n");
关于java - 拆分返回 PatternSyntaxException : Illegal/unsupported escape sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57203130/
什么错误的正则表达式可能会产生有多种原因的 PatternSyntaxException? PatternSytanxException IS-A 可抛出且具有方法 .getCause()。在使应用程
在我将语言环境切换为“fa”(波斯语)之前,我有一个运行良好的正则表达式。我怀疑希伯来语和阿拉伯语也会发生这种情况(尚不确定是字符还是 RTL 方向导致它中断)。 导致异常的代码行是: public
我正在尝试验证一些只允许使用拉丁字母的输入。为此,我正在使用下一个正则表达式: public boolean isValidInput(String inputText) { return i
我不确定为什么以下代码会给我一个PatternSyntaxException: Pattern regex = Pattern.compile("\\[[12|\\[|\\|\\||\\^\\^|\\
看下面的代码: String comment = "1)FCR pick up in Hong Kong2)Local charges will be paiy in Hong Kong & in H
我已经修改了BluetoothChat 代码,以将串行数据从微 Controller 接收到我的Android 手机。当我运行以下代码 fragment 时,它给出了 java.util.regex.
所以我有这段 Java 代码: Pattern p = Pattern.compile("* bar"); Matcher m = p.matcher("foo bar"); System.out.p
我在编译正则表达式时遇到问题。我无法找到这个表达式的问题是什么,因为我从思科文档中得到了它,并且我不明白为什么它不起作用。我希望有人能告诉我它出了什么问题。这就是我正在尝试做的事情: public v
每次我尝试使用 s.split("*"); 分割字符串 "hello*world" 时,我都会得到一个 PatternSyntaxException。 我尝试使用 s.split("\*"); 但这给
这个问题在这里已经有了答案: Replace all method throws PatternSyntaxException (1 个回答) 关闭 6 年前。 我有这段代码: buffer
我不擅长正则表达式,我正在尝试使用 java.lang.String replaceAll() 方法,代码段如下 一个是: public class method3 { public stat
我正在尝试分解通过网站上的 API 获得的数组,Java 已将其作为 String 检索。 String[] ex = exampleString.split("},{"); 抛出PatternSyn
我正在尝试分解通过网站上的 API 获得的数组,Java 已将其作为 String 检索。 String[] ex = exampleString.split("},{"); 抛出PatternSyn
我正在尝试分解通过站点上的 API 获得的数组,Java 已将其检索为 String。 String[] ex = exampleString.split("},{"); PatternSyntaxE
我正在使用 json-io用于将一些 JSON 数据转换为 Java 对象: DataTransferContainer dataTransferContainer = (DataTransferCo
我正在编写一个汇编程序,用于分析汇编代码并生成目标代码。但是,我在使用正则表达式函数之一时遇到一些问题。我没有使用java正则表达式的经验,所以我不太确定我在做什么导致这个异常。下面是抛出异常的函数。
当我尝试执行 String.ReplaceAll 时,出现模式语法异常。 下面是我的字符串 Number of testcases to execute : 39? Starting execu
当我尝试执行以下代码时 text.matches("[a-zA-Z0-9 !\"#$%&'()*+,-./:;?@[\\]^_`{|}~]"); 我遇到异常 Exception in thread "
我有一个 Java 正则表达式 Pattern,由字符串末尾的一组任意字符组成,并具有正向后向查找功能。当我在 Android 之外使用 1.6 JDK 时,它编译并运行得很好,但当我将它放入 And
我需要使用 MaltParser 1.5 版本来解析俄语句子。因此,当我尝试输入 cmd 下一个命令时: java -jar malt.jar 我遇到了下一个异常: C:\malt1.5>java -
我是一名优秀的程序员,十分优秀!