[英]Escape special characters in java
我有一个文本文件,具有|
(管道)作为分隔器。 如果我正在阅读列,并且列本身也包含|
然后在分隔另一列的同时创建它。
范例:
name|date|age
zzz|20-03-22|23
"xx|zz"|23-23-33|32
我如何转义双引号""
的字符如何转义拆分中使用的正则表达式,以便它适用于用户指定的定界符,我尝试了String [] cols = line.split(“ \\ |”); System.out.println(“仅查看列==” + cols [1]));
如何在双引号“”中转义字符
这是一种方法:
String str = "\"xx|zz\"|23-23-33|32";
Matcher m = Pattern.compile("\"[^\"]*\"").matcher(str);
StringBuffer sb = new StringBuffer();
while (m.find())
m.appendReplacement(sb, m.group().replace("|", "\\\\|"));
m.appendTail(sb);
System.out.println(sb); // prints "xx\|zz"|23-23-33|32
为了找回列,您需要执行以下操作:
String str = "\"xx\\|zz\"|23-23-33|32";
String[] cols = str.split("(?<!\\\\)\\|");
for (String col : cols)
System.out.println(col.replace("\\|", "|"));
关于您的编辑:
如何对拆分中使用的正则表达式进行转义,以便它可用于用户指定的定界符
您应该在要分割的字符串上使用Pattern.quote
:
String[] cols = line.split(Pattern.quote(delimiter));
即使delimiter
包含特殊的正则表达式符号(例如),这也将确保拆分能够按预期工作.
或|
。
您可以将其替换为其unicode序列(在使用管道定界之前)
但是您应该做的是调整解析器以考虑到这一点,而不是更改文件。
您可以使用CSV解析器,例如OpenCSV或Commons CSV
这是解析它的一种方法
String str = "zzz|20-03-22|23 \"xx|zz\"|23-23-33|32";
String regex = "(?<=^|\\|)(([^\"]*?)|([^\"]+\"[^\"]+\".*?))(?=\\||$)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while(m.find()) {
System.out.println(m.group());
}
输出 :
zzz
20-03-22
23 "xx|zz"
23-23-33
32
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.