我的文本文件中包含以下数据。
await
我想要这个输出:
5
基本上,我想将1|"John"|3,5400
2|"Jim"|7,7300
3|"Smith,Robin",3,4300
4|"O'Brien",10,8200
字符替换为逗号并将双引号替换为单引号。我可以通过这段代码来实现:
(1,'John',3,5400)
(2,'Jim',7,7300)
(3,'Smith,Robin',3,4300)
(4,'O''Brien',10,8200)
我得到的输出:
|
但是我还有一个要求,就是每当字符串之间出现单引号时,都需要放置两个单引号,例如,O'Brien为O''Brien。但是这部分不起作用。
答案 0 :(得分:3)
如@AndyTurner所建议的那样,您可以通过首先用'
替换所有''
,然后用"
替换所有'
来简化问题。此后唯一缺少的是括号,可以分两步添加:
) (
替换所有空格(注意括号之间的空格)。(
上添加前导)
和尾随String
。总而言之,解决方案可能看起来像这样:
final String output = "("
+ input
.replace("'", "''")
.replace("\"", "'")
.replace("|", ",")
.replace(" ", ") (")
+ ")";
答案 1 :(得分:0)
可能的解决方案可能是:
String lineSeparator = System.getProperty("line.separator");
String output = new StringBuilder("(").append(
input.replaceAll("\\|", ",")
.replaceAll("'", "''") // (*)
.replaceAll("\"", "'") // (**)
.replaceAll(lineSeparator, ")" + lineSeparator + "("))
.append(")").toString();
请注意,替换(*)必须在(**)之前。由于您需要替换精确的字符而不是变量正则表达式,因此最好使用replace
而不是replaceAll
。
答案 2 :(得分:0)
尝试此正则表达式:
\ s * \'\ s *
并调用“替换为”即可完成工作。