java - replaceAll() 工作一次,但不是两次?

标签 java

<分区>

我有这个方法,它按预期工作:

public void splitReplaceAndPrint()
{
    words = new String[200];

    String bookReplacedWithNoCommas = book.replaceAll(",", "");

    words = bookReplacedWithNoCommas.split(" ");

    for(int i = 0; i < words.length; i++)
    {
        System.out.println(words[i]);
    }
}

但是如果我也尝试删除这些点,就像这样......:

public void splitReplaceAndPrint()
{
    words = new String[200];

    String bookReplacedWithNoCommas = book.replaceAll(",", "");
    String bookReplacedWithNoPoints = bookReplacedWithNoCommas.replaceAll(".", "");

    words = bookReplacedWithNoPoints.split(" ");

    for(int i = 0; i < words.length; i++)
    {
        System.out.println(words[i]);
    }
}

... 没有打印任何内容。为什么这不起作用?

最佳答案

因为 . 意味着任何东西所以逃避它。

正则表达式中的

. 将匹配任何字符,因此它将替换字符串中的所有内容,因此您应该利用 replace 而不是昂贵的正则表达式

 book.replace(",", "");

或者 单步删除 ,.

 book.replaceAll("[.,]", "");

[.,] :[] 表示 character class这意味着同时匹配逗号和点


以防万一,如果您想使用replace 来删除单个字符,那么您可以应用一系列replace 函数作为

String book ="The .bo..ok of ,eli..";
book.replace(",","").replace(".",""); // The book of eli

关于java - replaceAll() 工作一次,但不是两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44343590/

相关文章:

java - Spring获取泛型类型类

java - 如何使用Gradle run任务禁用IntelliJ以运行我的代码?

java - 运行 Java 代码然后在 JSP 中发送电子邮件的最佳方式?

java - 单元测试时如何使用测试资源文件夹中的数据

java - 有没有办法将方法包含到表单布局上的响应步骤中

javascript - 如何编写查找父子的递归方法

java - 我需要一种方法来操作 JTextArea 中的最后一个字符(通过删除它)

Java:通过多个字段过滤集合和检索数据

java - 使用Java将十六进制转储的字符串表示形式转换为字节数组?

java - JPA Unidrectional OneToMany 通过 JoinColumn 返回相同的记录 n 次而不是 n 个不同的记录