Java正则表达式查找和更新
我需要在java项目的每个文件中添加几个import语句。我已经编写了正则表达式来执行此活动Java正则表达式查找和更新,java,regex,Java,Regex,我需要在java项目的每个文件中添加几个import语句。我已经编写了正则表达式来执行此活动 File1.java /********************** * *History Card * ***********************/ package com.employee.details; import java.io.BufferedReader; import java.io.File; public class File1 { // java code } Fil
File1.java
/**********************
*
*History Card
*
***********************/
package com.employee.details;
import java.io.BufferedReader;
import java.io.File;
public class File1
{
// java code
}
File2.java
package com.employee.details;
/**********************
*
*History Card
*
***********************/
import java.io.BufferedReader;
import java.io.File;
public class File1
{
// java code
}
执行更新的代码:
String regEx = "^package .*;";
String pattern = "\0\n\nimport java.io.FileReader;\nimport java.nio.file.Path;";
textFile.replaceAll(regEx,pattern);
它不起作用了。我的代码有什么问题?请帮助我问题是a)文件开头的注释,b)贪婪的量词,以及c)缺少变量赋值。可能还有一个已删除的包声明。您应该使用以下代码:
String regex = "(package .*?;)";
String replacement = "$1\0\n\nimport java.io.FileReader;\nimport java.nio.file.Path;";
textFile = textFile.replaceFirst(regex, replacement);
Java中的字符串(事实上,在大多数语言中)是不可变的,因此,如果没有大量代码,您无法一次更改该字符串的每个实例。@RamenChef几乎是正确的,除了分组(即
(
和)
)是不必要的,并且也不需要反向引用(即\0
)。因此,下一个代码将起作用:
String regEx = "^package .*;";
String pattern = "$0\n\nimport java.io.FileReader;\nimport java.nio.file.Path;";
textFile = textFile.replaceAll(regEx,pattern);
请注意,代码与此之间的唯一区别是0之前的美元符号和将
replaceAll
结果赋值给textFile
,因为String
类型是。您的问题是java使用了背面引用的美元符号风格,而不是反斜杠风格
在您的替换中,\0
是nul
字符(十六进制零),而不是组零。将其更改为$0
:
String pattern = "$0\n\nimport java.io.FileReader;\nimport java.nio.file.Path;";
^----- backslash changed to dollar sign
为什么你不能对我的答案发表评论?@RamenChef因为评论不允许发布格式很好的代码。我认为
\0
是一个错误。我错了吗?@伊利亚,你错了\0
在某些其他语言中是反向引用,但在Java中不是,它是nul字符(0x00
或\u0000
)。在Java中,反向引用的形式为$n
,其中n是0-9,组0是整个匹配。