替换字符串中的连续字符

bud*_*udi 3 java regex

我需要用一个双引号替换所有连续的单引号:

// ''Hello World''     -> "Hello World"
// '''It's me.''''     -> "It's me."
// ''''Oh'' ''No'''    -> "Oh" "No"
// ''This'''Is''Fine'' -> "This"Is"Fine"
Run Code Online (Sandbox Code Playgroud)

我觉得这可以用正则表达式解决,但我不知道从哪里开始。

这是我目前的解决方案:

private fix(String line) {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < line.length(); ++i) {
        builder.append("'");
    }
    while (builder.length() > 1) {
        line = line.replace(builder.toString(), "\"");
        builder.deleteCharAt(0);
    }
    return line;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*mer 5

有不同的所谓量词来定义一个字符可以/必须重复给定的次数。

可能最著名的是 *(零次或多次出现)和 +(一次或多次出现)。在您的情况下对您有帮助的量词是 {2,},意思是“两次或多次出现”。这是更通用的 { minoccurrencesmaxoccurrences } 量词的特化。

所以你可以这样做:

line.replaceAll("'{2,}", "\"");
Run Code Online (Sandbox Code Playgroud)

在 JavaDocs 中,它定义在http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#greedy