Java 如何在数据中转义分隔符?
我有一个要保存为Java 如何在数据中转义分隔符?,java,Java,我有一个要保存为字符串的标题列表: -标题1 -标题2 -title|3 现在,我想将其保存为一行字符串,由|分隔,这意味着它将以以下方式结束:标题1 |标题2 |标题3 但是现在,当我拆分字符串时: String input = "title1|title2|title|3"; String[] splittedInput = input.split("\\|"); splittedInput将是以下数组:{“title1”、“title2”、“title”、“3”} 显然,这不是我想要的,
字符串的标题列表:
-标题1
-标题2
-title|3
现在,我想将其保存为一行字符串
,由|
分隔,这意味着它将以以下方式结束:标题1 |标题2 |标题3
但是现在,当我拆分字符串时:
String input = "title1|title2|title|3";
String[] splittedInput = input.split("\\|");
splittedInput
将是以下数组:{“title1”、“title2”、“title”、“3”}
显然,这不是我想要的,我希望数组的第三个条目是title | 3
现在我的问题是:如何正确地转义标题中的|
,以便在拆分字符串时,得到三个标题的正确数组,而不是4个标题
@Gábor Bakos
运行此代码段:
String input = "title1|title2|title\\|3";
String[] split = input.split("(?<!\\\\)\\|");
for (int i = 0; i < split.length; i++) {
split[i] = split[i].replace("\\\\(?=\\|)", "");
}
System.out.println(Arrays.toString(split));
String input=“title1 | title2 | title\\\\| 3”;
String[]split=input.split((?您可以使用任何东西。例如,与\
一起使用:
"title1|title2|title\\|3".split("(?<!\\\\)\\|").map(_.replaceAll("\\\\(?=\\|)", "")) //Scala syntax
删除转义字符也需要最终映射
(?是,(?=\\\\\\)
是对转义的
的额外展望。您可以使用任何东西。例如,\
:
"title1|title2|title\\|3".split("(?<!\\\\)\\|").map(_.replaceAll("\\\\(?=\\|)", "")) //Scala syntax
删除转义字符也需要最终映射
(?is,(?=\\\\\\\)
是转义的使用另一个分隔符,例如“title1,title2,title | 3”,而不是“title1 | title2 | title | 3”。然后拆分(“,”)使用另一个分隔符,例如“title1,title2,title | 3”,而不是“title1 | title2 | title2 |”;title |然后拆分(“,”)如果您使用TSV格式,则所选的分隔符决不能在数据中保留为未设置分隔符
您可以简单地转义数据(例如,title1 | title2 | title\| 3
),然后在(?(反向查找)上拆分
在Java中,它提供:
public static void main(String[] args) {
// prints out [title1, title2, title|3, title|4]
System.out.println(parsePipeSeparated("title1|title2|title\\|3|title\\|4"));
}
private static List<String> parsePipeSeparated(String input) {
return Stream.of(input.split("(?<!\\\\)\\|"))
.map(escapedText -> escapedText.replace("\\|", "|"))
.collect(Collectors.toList());
}
publicstaticvoidmain(字符串[]args){
//打印出[标题1,标题2,标题3,标题4]
System.out.println(parsePipeSeparated(“title1 | title2 | title\\\\| 3 | title\\\| 4”);
}
私有静态列表(字符串输入){
返回Stream.of(input.split)((?如果您使用TSV格式,则所选的分隔符在数据中决不能保留为未扫描
您可以简单地转义数据(例如,title1 | title2 | title\| 3
),然后在(?(反向查找)上拆分
在Java中,它提供:
public static void main(String[] args) {
// prints out [title1, title2, title|3, title|4]
System.out.println(parsePipeSeparated("title1|title2|title\\|3|title\\|4"));
}
private static List<String> parsePipeSeparated(String input) {
return Stream.of(input.split("(?<!\\\\)\\|"))
.map(escapedText -> escapedText.replace("\\|", "|"))
.collect(Collectors.toList());
}
publicstaticvoidmain(字符串[]args){
//打印出[标题1,标题2,标题3,标题4]
System.out.println(parsePipeSeparated(“title1 | title2 | title\\\\| 3 | title\\\| 4”);
}
私有静态列表(字符串输入){
返回Stream.of(input.split(“(?使用CSV解析器将使您的问题消失CSV解析器将如何解决?关于您的编辑,@ikhebgeenaccount可能重复:它应该是replaceAll
asreplace
replace逐字替换,而不是匹配的正则表达式。使用CSV解析器将使您的问题消失CSV解析器将如何解决?可能是d。)@ikhebgeenaccount关于您的编辑的副本:它应该是replaceAll
作为replace
逐字替换,而不是匹配正则表达式。这确实回答了我的问题,但我想要一个解决方案,它适用于任何字符,因为我不知道标题中会出现什么字符,但同样的问题也会出现ise代表逗号。真正的解决方案是有转义。这确实回答了我的问题,但我想要一个可以与任何字符一起使用的解决方案,因为我永远不知道标题中会出现什么字符,但逗号也会出现同样的问题。真正的解决方案是有转义。我想保留第三个标题为title | 3
youGH现在应该得到修复。如果还有标题\4
,考虑到replaceAll
调用,我将如何处理该问题?@ikhebgeenaccount在更新版本中不匹配:(title | 3
though现在应该被修复。现在如果还有一个title\4
,考虑到replaceAll
调用,@ikhebgeenaccount在更新版本中不匹配:(“title1 | title2 | title\\\| 3 | title\\4”。拆分((?好的,在评论中不起作用,编辑我的帖子。