正则表达式替换Java文件中的所有字符串文字

Bim*_*thy 2 java regex string

在我的程序中,我将逐行读取一个java文件,如果该行中有任何字符串文字,我将用(例如)"ABC"替换它.

有没有正则表达式这样做?

防爆.如果传递给我的程序的Java文件是:

public class TestClass {

    private static final boolean isNotThis = false;

    public static void main(String[] args) {
        String x = "This is a test String";
        dummyMethodCall();
        if(isNotThis){
            makeItThat();
            System.out.println("work is done");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么输出java文件应该是:

public class TestClass {

    private static final boolean isNotThis = false;

    public static void main(String[] args) {
        String x = "ABC";
        dummyMethodCall();
        if(isNotThis){
            makeItThat();
            System.out.println("ABC");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我愿意知道正则表达式,它将帮助我检测所有字符串文字,并用我选择的特定字符串替换它们.

编辑:

对我来说真正的挑战是避免字符串中的那些引号字符.(如果有人在字符串中放置带有转义字符的引号字符)

jlo*_*rdo 5

请考虑以下正则表达式:

String regex = "\"(?:\\\\\"|[^\"])*?\"";
Run Code Online (Sandbox Code Playgroud)

它以引号开头,后跟零个或多个非引号字符或转义引号字符.最后一个字符必须是引用.

如果将此正则表达式应用于java代码,请记住它还匹配注释中引号内的文本.如果你的评论中有不平衡的引号,它将不匹配字符串文字(它将匹配完全相反的).

如果您有一个String名为example以下变量的示例:

String wanted = example.replaceAll(regex, "\"ABC\"");
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子:

String literal = "String foo = \"bar\" + \"with\\\"escape\" + \"baz\";";
String regex = "\"(?:\\\\\"|[^\"])*?\"";
String replacement = "\"\"";
String wanted = literal.replaceAll(regex, replacement);
System.out.println(literal);
System.out.println(wanted);
Run Code Online (Sandbox Code Playgroud)

版画

String foo = "bar" + "with\"escape" + "baz";
String foo = "" + "" + "";
Run Code Online (Sandbox Code Playgroud)