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

标签 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");
        }
    }
}

那么输出的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");
        }
    }
}

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

编辑:

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

最佳答案

考虑以下正则表达式:

String regex = "\"(?:\\\\\"|[^\"])*?\"";

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

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

如果您在名为 exampleString 变量中发布了示例,则以下内容将起作用:

String wanted = example.replaceAll(regex, "\"ABC\"");

这是一个完整的示例:

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

打印

String foo = "bar" + "with\"escape" + "baz";
String foo = "" + "" + "";

关于java - 正则表达式替换 Java 文件中的所有字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18547501/

相关文章:

java - 程序与 CountDownTimer 配合得很好,直到还剩 3 秒,然后它调用两次

java - ActiveMQInitialContextFactory 与 NamingContextFactory

regex - 使用 awk 计算条件的出现次数

java - 如何用多个分隔符分隔字符串?

java - 我正在尝试一个简单的比较 2 个文本文件并打印 2 个之间的差异

java - 缺少资源异常 websphere 门户

javascript - 在两个单词之间应用正则表达式

javascript - 如何使用javascript正则表达式提取id : http://site/page? object_id=2

string - Terraform 将元组展平为字符串集

python - 正则表达式 替换多个单词,用它们构建列表