Java 字符串replaceALL在匹配前后的字母上带有条件
我正在从文本文件中读取字符串 密西西比州是一个有很多系统的州吗 我试图使用replace all将所有的“s”和“s”替换为相同的大小写“t”或“t”,除非在一个单词的开头,除非在“s”或“s”之前或之后有另一个“s”或“s” 预期产出:密西西比州是一个有大量Syttemt的州吗 我试过Java 字符串replaceALL在匹配前后的字母上带有条件,java,regex,conditional,replaceall,Java,Regex,Conditional,Replaceall,我正在从文本文件中读取字符串 密西西比州是一个有很多系统的州吗 我试图使用replace all将所有的“s”和“s”替换为相同的大小写“t”或“t”,除非在一个单词的开头,除非在“s”或“s”之前或之后有另一个“s”或“s” 预期产出:密西西比州是一个有大量Syttemt的州吗 我试过 .replaceAll("[^sStT](?!\\b)S", "T").replaceAll("[^SstT](?!\\b)s", "t"); 输出是…“t Mtstsippi存在多个Sttet的状态?”您
.replaceAll("[^sStT](?!\\b)S", "T").replaceAll("[^SstT](?!\\b)s", "t");
输出是…“t Mtstsippi存在多个Sttet的状态?”您可以通过两个
replaceAll
调用来完成此操作。一个用于s->t
,一个用于s->t
您可以使用look-behind
(?您可以通过两个replaceAll
调用来完成此操作。一个用于s->t
,一个用于s->t
您可以使用look-behind(?我知道已经有了一个公认的答案,但这里有另一种方法,可以使用一些java技巧和负面lookbehind/after来实现您想要的
String s = "Is Mississippi a State where there are a lot of Systems?";
s = s.replaceAll("(?<![ sS])(s|S)(?![sS])", Character.isUpperCase("$1".charAt(0)) ? "T" : "t");
System.out.println(s); // It Mississippi a State where there are a lot of Syttemt?
String s=“密西西比州是一个有很多系统的州吗?”;
s=s.replaceAll(“(?我知道已经有了一个公认的答案,但这里有另一种方法,可以通过使用一些java hack和消极的lookback/after来实现您想要的
String s = "Is Mississippi a State where there are a lot of Systems?";
s = s.replaceAll("(?<![ sS])(s|S)(?![sS])", Character.isUpperCase("$1".charAt(0)) ? "T" : "t");
System.out.println(s); // It Mississippi a State where there are a lot of Syttemt?
String s=“密西西比州是一个有很多系统的州吗?”;
s=s.replaceAll(“(?.replaceAll([^sStT](?!\\b)s”,“T”).replaceAll([^sStT](?!\\b)s”,“T”);输出是…“T Mtstsippi有许多Sttet的状态?”这会给您什么输出?添加附加信息(您的代码和结果输出)对于这个问题,不是在评论中。@realponsult:系统的新功能…感谢您提供的信息…我把它放到了问题中。replaceAll([^sStT](?!\\b)S,“T”)。replaceAll([^sStT](?!\\b)S”,“T”);输出是…“T mttsipi有许多Sttet的状态?”这会给您什么输出?添加其他信息(您的代码和结果输出)添加到问题中,而不是添加到注释中。@realpoint:系统新功能…感谢您提供的信息…我将其添加到问题中。我不知道如何“$1”。charAt(0)
实际上得到了它的值。$1
在调用replaceAll
之前不会被计算吗?实际上我刚刚用大写字符测试了这个参数!第二个参数在所有情况下总是被计算为“t”
。您看到的是“$”
@flkes你是对的。你认为解决方案是什么?我想是两次调用来替换。不确定一次替换你会怎么做。我很困惑“$1”。charAt(0)
实际上得到了它的值。$1
在调用replaceAll
之前不会被计算吗?实际上我刚刚用大写字符测试了这个参数!第二个参数在所有情况下总是被计算为“t”
。您看到的是“$”
@flkes你说得对。你认为解决办法是什么?我想是两次调用来替换。不确定一次替换怎么做