【问题标题】:java remove punctuation recursive methodjava去除标点递归方法
【发布时间】:2014-04-01 00:29:13
【问题描述】:

我做了一个从字符串中删除一些标点符号的方法,但它只是返回参数中传递的单词,其中包含标点符号,任何人都可以找出问题所在吗?

public static String removePunctuation(String word) {

    if (word.charAt(0) >= 32 && word.charAt(0) <= 46) {
        if(word.length() == 1){
            return "";
        } else {
        return removePunctuation(word.substring(1));
        }
    } else {
        if(word.length() == 1){
            return "" + word.charAt(0);
        } else {
        return word.charAt(0) + removePunctuation(word.substring(1));
        }
    }
}//end method

【问题讨论】:

  • 请为这些事情使用调试器;它们旨在解决这类问题。
  • 顺便说一句,如果您的基本情况是空字符串,而不是其中包含 1 个字符的字符串,您可能可以简化此操作。然后它就变成了if (word.isEmpty()) return word; ...,你摆脱了讨厌的嵌套ifs。
  • 请提供示例输入和输出,以便我们查看结果。
  • oops 案例结束,我的 ascii 代码值不包括我正在测试的所有标点符号
  • @user3189506,很高兴您发现了问题。由于花时间正确回答的两个人都确定了问题,请接受他们的一个答案。

标签: java recursion methods call


【解决方案1】:

我运行了您提供的输入代码:

h.ello 并得到输出hello

我在这里看到了一个功能齐全的方法。我认为您尝试删除的标点符号不是您在 if 语句中提供的 ASCII 范围的一部分。对照图表检查 ASCII 值。

ASCII values chart to compare with

不包括正确的值输入:

h[ello 将返回输出 h[ello,因为 [ 是 ASCII 值 91,它超出了您提供的范围: &gt;= 32 &amp;&amp; &lt;= 46

【讨论】:

    【解决方案2】:

    您的算法没有问题。您的范围(32-46)很可能不包括您要删除的所有标点符号。例如,? 是 63,因此不会被删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多