Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 字符串replaceALL在匹配前后的字母上带有条件_Java_Regex_Conditional_Replaceall - Fatal编程技术网

Java 字符串replaceALL在匹配前后的字母上带有条件

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的状态?”您

我正在从文本文件中读取字符串

密西西比州是一个有很多系统的州吗

我试图使用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
调用来完成此操作。一个用于
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你说得对。你认为解决办法是什么?我想是两次调用来替换。不确定一次替换怎么做