使用字符串替换x之后的所有单词

时间:2013-06-13 21:54:27

标签: java regex string replace

有了字符串,如何替换所有单词,特殊字符,数字,x之后的下一个是y。

实施例: 输入:

String test = "Hello @\"Thomas Anderson\" how are you? Today is 06/13/2013 com month day year !! \"example of date\"";
String x = "com";
String y = "word";

通缉输出:

String test = "Hello @\"Thomas Anderson\" how are you? Today is 06/13/2013 com word word word word word";

规则

特殊符号的串联计为1(a.g. !!,@!?...);

引号内的字符串也算作1个字(例如“yahooo ohoo hoho”......);

如果x大于1,则考虑第一个,然后将其作为单词;

2 个答案:

答案 0 :(得分:1)

String[] split = test.substring(test.indexOf(x) + x.length()).split(" ");
StringBuilder builder= new StringBuilder();
for (int i=0; i<split.length; i++) {
   builder.append(" " + y);
}
test = test.substring(0, test.indexOf(x) + x.length()) + builder.toString();
System.out.println(test);

经过测试,它有效。

对于引号之间的字词

编辑

  • 对句子进行一些基于正则表达式的预处理。查找与其匹配的模式(例如\“。* \”)并将其设为一个单词(y)。

答案 1 :(得分:1)

如果正则表达式支持非固定长度的后视机制,那么使用正则表达式在一行中完成它是很容易和最重要的,但遗憾的是它在Java中存在问题。你可以通过几个步骤完成它

//our data
String test = "Hello @\"Thomas Anderson\" how are you? Today is 06/13/2013 com month day year !! \"example of date\"";
String x = "com";
String y = "word";

//splitting string into parts before and after 'x' word
int brakePoint = test.indexOf(x) + x.length();
String prefix=test.substring(0,brakePoint);
String suffix=test.substring(brakePoint);

//in part after `x` replacing quotes OR set of non-white-space characters with 'y'
suffix = suffix.replaceAll("\"[^\"]+\"|\\S+", y);

//result
System.out.println(prefix+suffix);

输出

Hello @"Thomas Anderson" how are you? Today is 06/13/2013 com word word word word word

在我的正则表达式\"[^\"]+\"|\\S+

  • \"[^\"]+\"部分告诉正则表达式搜索引号\"字符,然后搜索一个或多个不是引号[^\"]的字符,再次引用引号\"

OR(|

  • \\S+表示至少有一个字符(+量词)不是空格\\S

哦,也许这会很有趣:这些部分的顺序非常重要,因为我们希望正则表达式在使用非白空间匹配之前搜索引号。