-4

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

示例:输入:

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 (ag !!, @!? ...);

引号内的字符串也算作 1 个单词(ag "yahooo ohoo hoho" ...);

如果 x 多于 1,则将第一个视为单词,并将其后的所有其余部分视为单词;

4

2 回答 2

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)。
于 2013-06-13T22:08:18.927 回答
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+

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

或 ( |)

  • \\S+这意味着至少一个字符(+量词)不是空格\\S

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

于 2013-06-13T22:36:17.560 回答