Java 根据组选择输出

Java 根据组选择输出,java,regex,Java,Regex,我有一些仅在一个单词中不同的字符串(例如foo字节栏和foo单词栏)。我使用多个正则表达式来解析它们(例如,(\w+)字节(\w+)->$11$2和(\w+)单词(\w+)->$12$2)是否可以根据输入字选择输出?(例如,(\w+)(\w+)(\w+)->$1$3)如果您需要更多示例,请告诉我。最好使用匹配器。appendReplacement/匹配器。appendTail如下: String input = "hello byte world"; Pattern p = Pattern.c

我有一些仅在一个单词中不同的字符串(例如
foo字节栏
foo单词栏
)。我使用多个正则表达式来解析它们(例如,
(\w+)字节(\w+)
->
$11$2
(\w+)单词(\w+)
->
$12$2
)是否可以根据输入字选择输出?(例如,
(\w+)(\w+)(\w+)
->
$1$3
)如果您需要更多示例,请告诉我。

最好使用
匹配器。appendReplacement
/
匹配器。appendTail
如下:

String input = "hello byte world";

Pattern p = Pattern.compile("(\\w+) (\\w+) (\\w+)");
Matcher m = p.matcher(input);

StringBuffer sb = new StringBuffer();
while (m.find()) {

    // Compute replacement for middle word
    String w = m.group(2);
    String s = w.equals("byte") ? "<A BYTE!>"
             : w.equals("word") ? "<A WORD!>"
             : "something else";

    m.appendReplacement(sb, "$1 " + s + " $3");
}
m.appendTail(sb);
System.out.println(sb);
String input=“hello byte world”;
模式p=模式。编译(“(\\w+)(\\w+)(\\w+)(\\w+)”;
匹配器m=p.Matcher(输入);
StringBuffer sb=新的StringBuffer();
while(m.find()){
//计算中间词替换
串w=m组(2);
字符串s=w.equals(“字节”)?“”
:w.等于(“单词”)?“”
:“其他东西”;
m、 (sb,“$1”+s+”$3”);
}
m、 (某人);
系统输出打印LN(sb);
输出:

hello <A BYTE!> world
你好,世界

您没有说过,但我假设您使用的是
replaceAll
?@t.J.Crowder是的,我可以使用这个
w.equals(…)?:吗?@kaetzacoatl:你把
replaceAll
和正则表达式搞混了
replaceAll
是一种使用正则表达式查找匹配项的方法,但随后会执行非正则表达式操作(如生成结果字符串)。我认为
replaceAll
没有您想要的功能。aioobe在上面所做的是非常慷慨地为您做了几乎所有的工作来替换当前的
replaceAll
code.@kaetzacoatl,不,在使用replaceAll时,您不能让替换成为匹配的函数。您有
$1
$2
。。。一起工作。没有办法表达它们的功能。@kaetzacoatl,我的帖子(和最后的评论)回答了你的问题吗?有什么需要澄清的吗?