【问题标题】:Java replace all String add quotations around all words but ignore periodsJava替换所有字符串在所有单词周围添加引号但忽略句点
【发布时间】:2016-09-29 17:23:05
【问题描述】:

所以我试图接受一个字符串并在每个单词周围添加引号以用于格式化目的

String data = "JavaScript, Spring 4.0"
String result = data.replaceAll("(\\w+)", "\"$1\"");
result = "[" + result + "]";             
System.out.println(result);

但它会像这样返回它:“JavaScript”、“Spring”、“4”.“0” 无论如何要忽略这里的期间?

【问题讨论】:

  • data.replaceAll("([\\w.]+)", "\"$1\"");
  • 你希望它返回什么? “忽略句点”是什么意思?
  • @AndyTurner 我想这应该是答案......

标签: java regex string


【解决方案1】:

在字符类中包含.

data.replaceAll("([\\w.]+)", "\"$1\"")
                  ^    ^ Make a character class
                      ^  Add period to the class

【讨论】:

    【解决方案2】:

    在您的正则表达式中,术语 \w 指的是任何不包含句点的单词字符(大小写字母、数字和下划线)。

    您可以扩展表达式以包含 character class - 一组字符 - 包含句点,如下所示:

    [\w.]+
    

    在上面的表达式中,方括号表示一个字符类。我保留了原来的\w 来匹配任何单词字符,还添加了一个句点。由于并非所有单词都有句点,因此即使句点不存在,表达式也需要匹配。 + 运算符匹配由字符类定义的集合中的 1 个或多个项目。

    在 Java 中转义反斜杠,您的代码应如下所示:

    String result = data.replaceAll("([\\w.]+)", "\"$1\"");
    

    【讨论】:

      【解决方案3】:

      使用(\\S+) 代替(\\w+)

      声明:String result = data.replaceAll("(\\S+)", "\"$1\"");

      输出:["JavaScript," "Spring" "4.0"]

      还有

      声明:String result = data.replaceAll("\\.|\\,", "").replaceAll("(\\S+)", "\"$1\"");

      输出:["JavaScript" "Spring" "40"]

      【讨论】:

      • 虽然您的建议适用于原始帖子中的特定示例,但它会错误地匹配标点符号,例如逗号、破折号等。此外,您的建议会完全删除句点 - 这是一种不受欢迎的效果。
      • 不会。这就是为什么我放了2个选项。第二个展示了一种方式,如果你想要任何特定的,你可以使用 | (或 replaceAll 中的条件)。这完全取决于您的要求。第一个示例表明,如果您想保留逗号、破折号等标点符号。如果您想保留它们,请选择解决方案 1。
      • OP 希望保留一个句点,例如在“4.0”中,但不是逗号、破折号等。您的解决方案都不能做到这一点。事实上,原始示例将使用您的第一种方法在第一组引号中包含“JavaScript”之后的逗号,并在您的第二种方法中去除句点。没有一个是 OP 要求的。
      猜你喜欢
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2011-07-18
      • 2016-03-01
      相关资源
      最近更新 更多