【问题标题】:replaceAll or regex java forward slashreplaceAll 或正则表达式 java 正斜杠
【发布时间】:2019-01-05 01:15:42
【问题描述】:

我想将字符串“S/”更改为“S/”。只有整个单词,我尝试使用 Pattern.compile 和 Matcher.quoteReplacement。我没找到解决办法。

public static void main(String[] args) {
    String cadena = "Moneda Actual : S/";
    cadena = cadena.replaceAll("\\bS/\\b", "S/.");
    System.out.println(cadena);
}

此代码打印:

Moneda 实际:S/

我要打印:

Moneda 实际:S/.

所以如果原文是"Moneda Actual : S/.",算法一定不能替换成"S/.."

【问题讨论】:

  • “我尝试了 Pattern.compile 和 Matcher.quoteReplacement。”编辑您的问题并显示您尝试过的代码。
  • 你可以使用replaceAll(string, "S\/", "S\/\.");
  • 整个单词是什么意思?

标签: java regex replaceall


【解决方案1】:

使用负面的展望:

cadena = cadena.replaceAll("\\bS/(?!\\.)", "S/.");

否定的前瞻断言(不消耗)下一个字符不是点。

这也将起作用,然后"S/" 出现在字符串的末尾。

——

斜线之后和点之前没有单词边界。单词边界位于“单词”字符(字母、数字和下划线)和非“单词”字符之间。不在空白和非空白之间。

【讨论】:

  • 很好的解决方案,还可以处理“S\.S\S\S\”。
  • @Wow \b(在字符串文字中编码为"\\b")是“单词边界”。它将阻止"XS/" 匹配。有关完整说明,请参阅 this answer
猜你喜欢
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多