替换字符串

时间:2015-07-24 13:56:26

标签: java string replace

我获得了字符串"('allan', 'bob's', 'charles', 'dom')"。现在我需要这个字符串,但格式为"('allan', 'bob''s', 'charles', 'dom')"

注意我已将bob's替换为bob''s,这就是全部。我最初的解决方案是

String str = "('allan', 'bob's', 'charles', 'dom')";
String[] elements = str.substring(1, str.length()-1).split(", ");
String res = "(";
for (int j = 0; j < elements.length; j++) {
    res += "'"+ elements[j].substring(1, elements[j].length()-1).replace("'", "''") + "'" + ((j == elements.length - 1) ? ")" : ",' ");
}

res是最终解决方案。不过我想知道是否有一个更短,更优雅的解决方案呢?

4 个答案:

答案 0 :(得分:1)

replaceAll将与"'s"一起用作正则表达式。

  public static void main(String[] args) {
            String str = "('allan', 'bob's', 'charles', 'dom')";
            str = str.replaceAll("'s", "''s");
            System.out.println(str);
        }

输出:

('allan', 'bob''s', 'charles', 'dom')

答案 1 :(得分:0)

听起来你只想用两个单引号替换两个字母之间的单引号。 String.replaceAll()使用正则表达式模式"(\\w)(['])(\\w)"和替换字符串"$1''$3"应该为您完成此任务。

模式分解:

  • (\\w) - 在第1组中收集一个字母或数字
  • ([']) - 将单引号捕获到第2组
  • (\\w) - 在第3组中收集一个字母或数字

替换字符串细分:

  • $1 - 捕获组1
  • '' - 两个单引号
  • $3 - 捕获论坛3

代码示例:

public static void main(String[] args) throws Exception {
    String str = "('allan', 'bob's', 'charles', 'dom')";
    str = str.replaceAll("(\\w)(['])(\\w)", "$1''$3");
    System.out.println(str);
}

结果:

('allan', 'bob''s', 'charles', 'dom')

答案 2 :(得分:0)

str = str.replace("'", "''").replaceAll("''(.*)?''(, *|\\)$)", "'$1'$2");
                                           (~~)   (~~~|~~~~)

在子串替换(没有函数替换)上不能加倍撇号,因此必须先完成。

然后人们可以挑出引用的值,然后纠正它们。

预告片是逗号+空格或最后的右括号。

.*?采用最短的序列。

答案 3 :(得分:0)

我建议修复输出该字符串的东西,并且:

  • 使用转义序列
  • 使用一些库来读/写数据json或者yaml可能是好的候选人