繁体   English   中英

替换字符串中重复字符的最佳方法

[英]Best way to replace repeated character in String

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

注意,我已经用bob's替换了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是最终解决方案。 但是我想知道是否有一个更短,更优雅的解决方案?

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')

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

模式细分:

  • (\\\\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')
str = str.replace("'", "''").replaceAll("''(.*)?''(, *|\\)$)", "'$1'$2");
                                           (~~)   (~~~|~~~~)

不能在子字符串替换上完成撇号加倍(无功能替换),因此必须首先完成。

然后,可以选择引用的值并进行更正。

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

.*? 需要最短的顺序。

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

  • 使用转义序列
  • 使用一些库来读取/写入数据json或yaml可能是不错的选择

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM