当前位置: 首页 > 知识库问答 >
问题:

如何使用模式。与正则表达式匹配以过滤字符串中不需要的字符

高祺
2023-03-14

我正在为一个类开发一个程序,该程序要求我们将输入字符串传递给nteger.parseInt函数。在我交出字符串之前,我想确保它不包含任何非数字值。我用Pattern.matches创建了这个同时函数来尝试这个。这是代码:

while((Pattern.matches("[^0-9]+",inputGuess))||(inputGuess.equals(""))) //Filter non-numeric values and empty strings.
                {
                    JOptionPane.showMessageDialog(null, "That is not a valid guess.\nPlease try again.");
                    inputGuess=(JOptionPane.showInputDialog(null, "Enter your guess.\nPlease enter a numeric value between 1 and 12."));
                }

每当我输入任何字母、标点符号或“特殊字符”,而语句就会发挥应有的作用。但是,每当我引入字母、标点符号或“特殊字符”和数字的任何组合时,程序就会崩溃和燃烧。我的问题是:有没有一种方法可以将Pattern.matches与正则表达式一起使用,使我能够防止数字和字母、标点符号或“特殊字符”的任何组合被交给nteger.parse国际,但仍然只允许数字交给nteger.parse国际。

共有2个答案

武彭薄
2023-03-14

您的程序不工作,因为Pattern.matches需要整个字符串来匹配模式。相反,即使字符串的单个子字符串与您的模式匹配,您也希望显示错误。

这可以通过Matcher类来完成

public static void main(String[] args) {
    Pattern p = Pattern.compile("[^\\d]");

    String inputGuess = JOptionPane.showInputDialog(null, "Enter your guess.\nPlease enter a numeric value between 1 and 12.");

    while(inputGuess.equals("") || p.matcher(inputGuess).find()) //Filter non-numeric values and empty strings.
    {
        JOptionPane.showMessageDialog(null, "That is not a valid guess.\nPlease try again.");
        inputGuess=(JOptionPane.showInputDialog(null, "Enter your guess.\nPlease enter a numeric value between 1 and 12."));
    }
}
花烨
2023-03-14

试试这个:

!Pattern.matches("[0-9]+",inputGuess)

或者更简洁地说:

!Pattern.matches("\\d+",inputGuess)

使用也无需检查空字符串。

请注意,Integer.parseInt仍然有可能因越界而失败。

为了防止这种情况,你可以

!Pattern.matches("\\d{1,9}",inputGuess)

尽管这排除了一些大的有效整数值(任何十亿或更多)。

老实说,我会使用try-catch和Integer。解析int,必要时检查其符号。

 类似资料:
  • 问题内容: 基本上,我想知道是否有一个方便的类或方法来过滤String以查找不需要的字符。该方法的输出应为“ cleaned”字符串。即: 预期结果将是: 一个更好的例子: 我希望结果是: 因为,我让清洁工知道’‘,’*’,’#’,’&’和’_’是脏字符。我可以通过使用黑白字符列表数组来解决此问题。但是我不想重新发明轮子。 我想知道是否已经可以使用正则表达式“清理”字符串。而不是自己写这个。 另外

  • 问题内容: 在Swift中,查看字符串是否与模式匹配的简单方法是什么? 伪代码示例: (我已阅读斯威夫特文档并没有看到一个正则表达式的能力。我读过有关增加一个新的运营商是一个好主意,但不是我想,因为这是一个教学项目。我已经尝试了更复杂的,但收到错误:“字符串”没有成员“ rangeOfString”。我正在寻找一种Swift解决方案,即未键入NSRegularExpression。我不需要对匹配结

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 问题内容: 我有一个输入字符串。 我正在考虑如何有效地将此字符串与多个正则表达式匹配。 我想针对这些正则表达式模式进行匹配,如果其中至少一种匹配则返回: 我不确定如何一次匹配多种模式。有人可以告诉我我们如何有效地做到这一点吗? 问题答案: 如果只有几个正则表达式,并且在编译时都知道它们,那么这就足够了: 如果它们更多,或者它们在运行时加载,则使用模式列表:

  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 为什么Pattern/Matcher使用但是不工作? 例如: 指纹: 但: 仅打印: