从字符串中移除特定字符。

6

我想创建一个程序,用于统计用户输入字符串中的字符数、单词数等。为了获取单词数,我需要从字符串中删除所有句号和逗号。目前我有以下代码:

import javax.swing.JOptionPane;
public class WordUtilities
{
   public static void main(String args[])
   {
      {
      String s = JOptionPane.showInputDialog("Enter in any text.");

      int a = s.length();
      String str = s.replaceAll(",", "");
      String str1 = str.replaceAll(".", "");
      System.out.println("Number of characters: " + a);
      System.out.println(str1);
      }
   }
}

但最终我只得到了这个:
Number of characters: (...)

为什么它没有给我没有逗号和句号的字符串?我需要修复什么?

1
因为replaceAll期望一个正则表达式,而 . 是一个特殊符号。 - nachokk
@nachokk 那么我需要使用什么语法来删除特殊符号(.和,)? - f3d0r
你需要删除的不仅仅是句号和逗号:冒号、分号、破折号(与连字符不同)、撇号、双引号等都需要删除...最好删除除了你想计算为字符的内容以外的所有内容。 - user1932079
@dasblinkenlight 的代码 s = str.replaceAll("[.]", "") 已经解决了另一个问题。谢谢。 - f3d0r
2个回答

11

你可以使用:

String str1 = str.replaceAll("[.]", "");

改为:

String str1 = str.replaceAll(".", "");

正如@nachokk所说,您可能需要阅读一些有关正则表达式的内容,因为replaceAll方法的第一个参数需要一个正则表达式。

编辑:

或者只需这样:

String str1 = s.replaceAll("[,.]", "");

使所有内容成为一个句子。


1
.仍然需要转义为"[\.]" - user1932079
3
@JeremyMiller,不在字符类中。 - Paul Samsotha
@peeskillet - 我错了。谢谢! - user1932079

4
你可以使用 String#replace() 替换 replaceAll,因为 String#replaceAll 会用给定的替换字符串替换与给定正则表达式匹配的此字符串的每个子字符串。
因此,在代码中使用 replace 如下:
 str = str.replace(",","");
 str = str.replace(".","");

或者你可以使用一个完整的正则表达式:

str = str.replaceAll("[.,]", "");

+1 用于差异澄清 - Paul Samsotha
你应该反转代码,因为解释是针对后一种情况的。 - Paul Samsotha
@peeskillet,我不明白你的意思。 - nachokk
底部的代码与您的答案描述相匹配。因此,请先放置该代码。然后,您可以在replaceAll情况下使用OR。这样更有逻辑意义,也会使您的答案更加流畅。 - Paul Samsotha
1
我最喜欢你的答案。人们太习惯于创建新字符串,而忘记了你可以让旧字符串等于修改后的字符串,但这种情况下,你应该使用“s”而不是“str”。 - Paul Samsotha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接