Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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 - Fatal编程技术网

Java 是否在替换前更改结果组文本?

Java 是否在替换前更改结果组文本?,java,regex,Java,Regex,我需要将每个'\w(空格)\w'替换为'\w\w'(不带空格) 在替换之前,我是否可以更改“$0”组中的结果(删除空格) 我需要返回“ab cd ef” 更复杂的示例: 123321321。。。123号码->123321321…123号码 通过正则表达式(\d{3})+(number)如果要对匹配的结果执行某些操作,则必须使用额外的StringBuffer,以及Matcher.appendReplacement()方法 但是,您也可以实现这一点: String result = "a b c d

我需要将每个
'\w(空格)\w'
替换为
'\w\w'
(不带空格)

在替换之前,我是否可以更改“$0”组中的结果(删除空格)

我需要返回“ab cd ef”

更复杂的示例:

123321321。。。123号码
->
123321321…123号码


通过正则表达式
(\d{3})+(number)

如果要对匹配的结果执行某些操作,则必须使用额外的
StringBuffer
,以及
Matcher.appendReplacement()
方法

但是,您也可以实现这一点:

String result = "a b c d e f".replaceAll("(\\w) (\\w)", "$1$2");

在这个简单的例子中,每个匹配项都有一个空格,因此删除空格意味着替换为一个空字符串。而且,
String
可以直接执行,如下所示:

String res = "a b c d e f ...".replaceAll("\\w \\w", "");
一个更有趣的情况是,您需要像处理替换一样处理每个匹配。在这种情况下,您应该使用和方法,这两种方法协同工作:

Pattern p = Pattern.compile("\\w \\w");
Matcher m = p.matcher("a b c d e f ...");
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, "#");
}
m.appendTail(sb);
String result = sb.toString();

你的代码片段返回'abcdef',但我需要'ab cd ef'@wtrclr更新答案。它可以工作,但如果我需要转换每个'123 231。。。123号'至123231…123号'。我不知道三人一组的人数。表达式:
(\d{3})+number
删除或留下空格的规则是什么?只删除数字块之间的空格。这与您以前的要求不符,其中
“a b c d e f”
应该变成
“ab cd ef”
Pattern p = Pattern.compile("\\w \\w");
Matcher m = p.matcher("a b c d e f ...");
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, "#");
}
m.appendTail(sb);
String result = sb.toString();