首页 > 解决方案 > 摆脱字符串中的标点符号

问题描述

我知道在 Java 中有一些速记方法可以解决这个问题,例如

s = s.replaceAll("\\p{Punct}", "");

但是我被指示创建一种方法,可以在不使用这种 ~1 行快捷方式的情况下摆脱标点符号。

这是我迄今为止尝试过的——</p>

      private String removePunctuation( String s )
      {
         //StringBuilder sb = new StringBuilder(s);
         String resultString = ""; 
         String punctuations = "!@#$%^&*()~?,.:;\"'";
         for(int i = 0; i<s.length()-1; i++)
         {
            String sub = s.substring(i, i+1);
            if(punctuations.indexOf(sub) == -1) 
            {
               //sb.deleteCharAt(i); 
               resultString += s.substring(i, i+1); 
            }
         }
         //String resultString = sb.toString(); 
         return resultString; 
      }

然而,虽然它运行时没有“错误”,但事实证明我的字符串没有改变,并且仍然包含标点符号。我可能做错了什么?

标签: javastringcharsubstring

解决方案


有多种方法可以解决此问题,但您对连续的使用substring是不正确的(并且是不必要的)。相反,创建一个空StringBuilder并迭代 input 的每个索引String。获取该索引处的字符,然后检查它是否不存在于您的集合中punctuations。假设不是,请将其附加到StringBuilder. 完成迭代后,返回StringBuildera String。喜欢,

private String removePunctuation(String s) {
    StringBuilder sb = new StringBuilder();
    String punctuations = "!@#$%^&*()~?,.:;\"'";
    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        if (punctuations.indexOf(ch) < 0) {
            sb.append(ch);
        }
    }
    return sb.toString();
}

推荐阅读