我正在从文本文件中读取字符串
示例:密西西比州是一个拥有大量系统的州吗?
我正在尝试使用全部替换来将所有“s”和“S”替换为相同大小写的“t”或“T”,除非位于单词开头并且除非在“s”或“S”之前或之后"还有另一个“s”或“S”。
预期输出:密西西比州是一个有很多系统的州吗?
我已经尝试过了...
.replaceAll("[^sStT](?!\\b)S", "T").replaceAll("[^SstT](?!\\b)s", "t");
输出是...“t Mtstsippi 是一个有很多 Sttet 的州?”
最佳答案
您可以使用两个 replaceAll
来完成此操作来电。一个 s -> t
和一个 S -> T
您可以使用后视 (?<=regex)
和前瞻 (?=regex)
组来查找模式而不替换其内容。
后视将检查 s
之前的字符不在字符列表中 [^<list>]
。该列表包括起始字符 ^
和sS
和tT
和空格\\s
(?<=[^^\\ssStT])
前瞻将进行类似的检查,但仅验证下一个字符不是 sS
(?=[^sS])
把这些放在一起:
String test = "Is Mississippi a State where there are a lot of Systems?";
System.out.println(test
.replaceAll("(?<=[^^\\ssStT])s(?=[^sS])","t")
.replaceAll("(?<=[^^\\ssStT])S(?=[^sS])","T")
);
关于java - 字符串replaceALL与匹配前后字母的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36410944/