gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:39:22 32 4
gpt4 key购买 nike

在我的程序中,我将逐行读取一个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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com