如何用Java中的两个单引号替换字符串中的单引号?

时间:2020-01-18 16:43:13

标签: java regex string

我的文本文件中包含以下数据。

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。但是这部分不起作用。

3 个答案:

答案 0 :(得分:3)

如@AndyTurner所建议的那样,您可以通过首先用'替换所有'',然后用"替换所有'来简化问题。此后唯一缺少的是括号,可以分两步添加:

  1. ) (替换所有空格(注意括号之间的空格)。
  2. (上添加前导)和尾随String

总而言之,解决方案可能看起来像这样:

final String output = "(" 
        + input
            .replace("'", "''")
            .replace("\"", "'")
            .replace("|", ",")
            .replace(" ", ") (")
        + ")";

Ideone demo

答案 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 *

并调用“替换为”即可完成工作。

相关问题