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

为什么p{Digit}模式在Java中不起作用?[重复]

魏鸿禧
2023-03-14

我使用p{Digit}来验证字符串。然而,当我使用"101 1"的结果是真的。这发生在一些符号上:,

Pattern p = Pattern.compile("[\\p{Digit}]");
boolean result = p.matcher(value).find();

我没有找到在留档中验证的字符。

共有1个答案

晋骏喆
2023-03-14

我相信你误解了find()的用法。它搜索搜索文本中第一次出现的正则表达式Pattern.start()返回找到表达式的位置)

表达式“[\\p{Digit}]”[]在这里什么都不做-只匹配一个数字。由于搜索的文本有一个数字,find()的结果是true

要匹配整个文本,表达式必须以^开头以匹配文本开头,并以与文本结尾相对应的$结尾。而且它必须允许一个以上的数字,所以它需要一个(一个或多个)来产生

Pattern p = Pattern.compile("^\\p{Digit}+$");
boolean result = p.matcher(value).find();

matches()可用于测试整个文本,因此不需要使用^$——仍然需要一个来允许多个数字:

Pattern p = Pattern.compile("\\p{Digit}+");
boolean result = p.matcher(value).matches();

注:这可以写成:

boolean result = value.matches("\\p{Digit}+");
 类似资料:
  • 描述 (Description) 字符类\p{Digit}匹配任何数字。 例子 (Example) 以下示例显示了Posix字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PosixCharacterClassDemo {

  • 问题内容: 我们在其他语言中认为是理所当然的,并且几乎期望它可以继续工作,但不会起作用-这样做是如此自然,所以为什么编译器不满意?只是有时候感觉就像不耐烦。 递增值的唯一方法是将其放在单独的行中? http://play.golang.org/p/_UnpZVSN9n 问题答案: 而在golang声明,不表达

  • 问题内容: 为什么这项工作有效- 但这不是- 第二种情况下的输出为。你能解释一下输出吗? 问题答案: 该方法没有返回值。它会在适当的位置更改列表,并且由于您没有将分配给任何变量,因此只是“迷失在空间” 我没有重载所有有问题的方法,但是概念应该很清楚。

  • 我试图在我的Word文档中使用块,但我有一些问题。首先,当我在我的文档中声明一个块时,如果我不使用函数“cloneBlock”,结果会出现这样的情况: 也许我必须使用那个函数才能正常出现。但是我的主要问题是“删除块”不起作用。如果我不克隆块,生成的docx就会损坏。但是如果我克隆了这个块,函数“删除块”不会删除这个块,它会在我的最终docx文件中显示那个块内的信息。 这是我的代码: Docx模板:

  • 问题内容: 我的Dockerfile创建一个目录,将其chown,然后再列出该目录。该目录仍归root用户所有。这是为什么? 这是Dockerfile: 这是“ docker build”的输出: Docker版本1.2.0,构建fa7b24f 主机运行Ubuntu 12.04,但具有3.13.0-36通用内核。 问题答案: 回答我自己的问题:它声明为卷。如果取出VOLUME指令,则将生效。 此外

  • 问题内容: 我想在控制台中打印一些内容,以便对其进行调试。但是由于某种原因,我的Android应用程序中没有任何内容。 那我该如何调试呢? 问题答案: 在仿真器上,大多数设备都重定向到LogCat并使用进行打印。在非常旧的或自定义的Android版本上可能并非如此。 原版的: 没有控制台将消息发送到,因此消息丢失。当你使用来运行“传统” Java应用程序时,也会以同样的方式发生这种情况。 相反,你