Java 如何在正则表达式中放置参数?
因此,我试图在正则表达式模式中使用参数,但找不到模式,因为参数是一个简单字符串,包含在较大的字符串中。以下是任务本身,这是我从这个codingbat.com获取的,所以一切都要弄清楚: 任务的前提和解释 给定一个字符串和一个非空单词字符串,返回 所有字符都被加号(“+”)替换的原始字符串, 除了保留的字串外观之外 不变 我的代码:Java 如何在正则表达式中放置参数?,java,regex,string,arguments,argument-passing,Java,Regex,String,Arguments,Argument Passing,因此,我试图在正则表达式模式中使用参数,但找不到模式,因为参数是一个简单字符串,包含在较大的字符串中。以下是任务本身,这是我从这个codingbat.com获取的,所以一切都要弄清楚: 任务的前提和解释 给定一个字符串和一个非空单词字符串,返回 所有字符都被加号(“+”)替换的原始字符串, 除了保留的字串外观之外 不变 我的代码: public String plusOut(String str, String word) { if(str.matches(".*(<word>.
public String plusOut(String str, String word) {
if(str.matches(".*(<word>.*<word>){1,}.*") || str.matches(".*(<word>.*<word>.*<word>){1,}.*")) {
return str.replaceAll(".", "+"); //after finding the argument I can easily exclude it but for now I have a bigger problem in the if-condition
} else {
return str;
}
}
输入/输出
plusOut(“12xy34”,“xy”)→ “+++y++”(应为“++xy++”)plusOut(“12xy34”,“1”)→ “1+++”(应为“1+++”)
plusOut(“12xy34xyabcxy”,“xy”)→ “+++y+++y+++++y”(应为“++xy++xy+++xy”)
这是因为天气不好吗?在正则表达式中。您需要使用Java的
+
操作符连接它
if(str.matches("<"+word+">")){ // Now word will be replaced by the value
//do Anything
}
if(str.matches(“”){//Now word将被值替换
//做任何事
}
不能在正则表达式模式中放置参数。通过将变量与正则表达式模式部分串联,可以创建正则表达式对象,如下所示:
public String plusOut(String str, String word)
{
if(str.matches(".*("+ word + ".*" + word + "){1,}.*") || str.matches(".*(" + word + ".*" + word + ".*" + word + "){1,}.*"))
{
return str.replaceAll(".", "+");
}
else
{
return str;
}
}
您不能只使用模式,您必须在模式之外编写一些代码。试试这个:
public static String plusOut(String input, String word) {
StringBuilder builder = new StringBuilder();
Pattern pattern = Pattern.compile(Pattern.quote(word));
Matcher matcher = pattern.matcher(input);
int start = 0;
while(matcher.find()) {
char[] replacement = new char[matcher.start() - start];
Arrays.fill(replacement, '+');
builder.append(new String(replacement)).append(word);
start = matcher.end();
}
if(start < input.length()) {
char[] replacement = new char[input.length() - start];
Arrays.fill(replacement, '+');
builder.append(new String(replacement));
}
return builder.toString();
}
公共静态字符串plusOut(字符串输入,字符串字){
StringBuilder=新的StringBuilder();
Pattern=Pattern.compile(Pattern.quote(word));
Matcher Matcher=pattern.Matcher(输入);
int start=0;
while(matcher.find()){
char[]replacement=新字符[matcher.start()-start];
数组。填充(替换“+”);
append(新字符串(替换)).append(word);
start=matcher.end();
}
if(开始
也许一些输入/输出对我们更好地理解这个问题。@neerajain示例plusOut(“12xy34”,“xy”)→ “++xy++”
这个词是“xy”,但它也可能出现很多次,我搜索与第二个参数匹配的正则表达式。你是说++
正在替换1234?你能从codingbat.com上找到这个链接吗?@Baby你不能用regex实现这个
public static String plusOut(String input, String word) {
StringBuilder builder = new StringBuilder();
Pattern pattern = Pattern.compile(Pattern.quote(word));
Matcher matcher = pattern.matcher(input);
int start = 0;
while(matcher.find()) {
char[] replacement = new char[matcher.start() - start];
Arrays.fill(replacement, '+');
builder.append(new String(replacement)).append(word);
start = matcher.end();
}
if(start < input.length()) {
char[] replacement = new char[input.length() - start];
Arrays.fill(replacement, '+');
builder.append(new String(replacement));
}
return builder.toString();
}