强文我在文本文件中有很多行,我希望与${ALPANUMERIC characters}
匹配,并将其替换为${SAME ALPHANUMERIC characters plus _SOMETEXT(CONSTANT)}
。
我已经尝试过这个表达式${(.+)}
但它没有用,我也不知道如何在java中替换正则表达式。
感谢您的反馈
以下是我的一些代码:
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
Pattern p = Pattern.compile("\\$\\{.+\\}");
Matcher m = p.matcher(line); // get a matcher object
if(m.find()) {
System.out.println("MATCH: "+m.group());
//TODO
//REPLACE STRING
//THEN APPEND String Builder
}
}
确定以上情况有效,但它只找到我的变量,而不是前面的整行是我的输入:
在${VARIABLE_NAME}
之前的一些文字
在${VARIABLE_NAME2}
之前的一些文字之后的一些文字
在一些文本之前的一些文本没有变量之后的一些文本
......等等
所以我只想将${VARIABLE_NAME}
或${VARIABLE_NAME}
替换为${VARIABLE_NAME2_SOMETHING}
,但保留前后文本行
编辑:
我虽然有这样的方式:
if(line.contains("\\${([a-zA-Z0-9 ]+)}")){
System.out.println(line);
}
if(line.contains("\\$\\{.+\\}")){
System.out.println(line);
}
我的想法是捕获包含它的行,然后替换,但正则表达式不正常,但它适用于模式/匹配器组合。
编辑II
我觉得我在这里越来越接近解决方案,这是我到目前为止所提出的:
if(line.contains("$")){
System.out.println(line.replaceAll("\\$\\{.+\\}", "$1" +"_SUFFIX"));
}
我在$1
的意思是你刚刚匹配的字符串替换它自己+ _SUFFIX
答案 0 :(得分:1)
$
是一个特殊的正则表达式字符,表示一行的结尾。你需要逃脱它以匹配它。由于Java处理字符串的方式,您还需要转义用于转义美元符号的反斜杠。
将文字放入字符串后,您应该可以执行以下操作:
str.replaceAll("\\${([a-zA-Z0-9 ]+)}", "\\${$1 _SOMETEXT(CONSTANT)}")
如果变量名中有其他字符(即下划线,符号等等),则只需将它们添加到您要匹配的字符类中。
修改:如果您想使用Pattern
和Matcher
,则仍有一些更改。首先,您可能希望在循环之外编译Pattern。其次,你可以使用它,虽然它更详细。
Pattern p = Pattern.compile("\\$\\{.+\\}");
Matcher m = p.matcher(line);
sb.append(m.replaceAll("\\${$1 _SOMETEXT(CONSTANT)}"));
答案 1 :(得分:1)
我会使用String.replaceAll()方法,如下所示:
`String old =“一些字符串数据”;
String new = old.replaceAll(“$([a-zA-Z0-9] +)”,“(\ 1)CONSTANT”); `
答案 2 :(得分:1)
解决方案:
while ((line = br.readLine()) != null) {
if(line.contains("$")){
sb.append(line.replaceAll("\\$\\{(.+)\\}", "\\${$1" +"_SUFFIX}") + "\n");
}else{
sb.append(line + "\n");
}
}
答案 3 :(得分:1)
line = line.replaceAll("\\$\\{\\w+", "$0_SOMETHING");
无需检查是否存在$
或其他内容;这是replaceAll()
所做的一部分。无论如何,contains()
不像find()
那样是正则表达式的;它只是进行简单的文字文本搜索。