Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在正则表达式中放置参数?_Java_Regex_String_Arguments_Argument Passing - Fatal编程技术网

Java 如何在正则表达式中放置参数?

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>.

因此,我试图在正则表达式模式中使用参数,但找不到模式,因为参数是一个简单字符串,包含在较大的字符串中。以下是任务本身,这是我从这个codingbat.com获取的,所以一切都要弄清楚:

任务的前提和解释

给定一个字符串和一个非空单词字符串,返回 所有字符都被加号(“+”)替换的原始字符串, 除了保留的字串外观之外 不变

我的代码:

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