0

我遇到以下问题:我的应用程序中某处有一些字符串要检查 - 检查该字符串是否包含不同于" "(空白)的字符/n/r 例如:

  • " g" - 包含
  • " /n " - 不包含
  • " " - 不包含

我想在 reg 表达式中执行此操作,但我不想使用通用模式.*[a-zA-Z0-9]+.* .相反,我想要类似.*[!" ""/n"/r"]. (每个不同于" " "/r"and的字符"n")。

我的问题是

  1. 我不知道这种模式是否有效(以上不起作用)
  2. 我不确定它是否会比使用常规字符串方法快得多。
4

2 回答 2

2

首先,您的意思是\nand \r,在 Java 中,这意味着使用\\nand转义反斜杠\\r

其次,如果您只是想捕捉任何非空白,只需使用模式\\S*[^\\s]. \S是非空白,或者\s是空白,[^<charset>]意思是“匹配任何不是其中之一的东西”。

第三,如果这是重复检查,请确保只编译一次正则表达式,然后多次使用它。

第四,遵循通常的分析策略。首先,这是否在您的应用程序中的关键地带?如果是这样,那么对自己进行基准测试。

于 2013-01-08T18:19:04.740 回答
1

这正是你想要的东西,但是(就像我上面所说的那样),它会更快地遍历字符:

Pattern NOT_WHITESPACE_DETECTOR = Pattern.compile("[^ \\n\\r]");
Matcher m = NOT_WHITESPACE_DETECTOR.matcher("  \n       \r      bla        ");
if (m.find()) {
   //string contains a non-white-space
}

另请注意,java中空格的定义比您指定的要宽得多,即使这样,unicode中也有java无法检测到的空格(但是有些库可以)

于 2013-01-08T18:12:39.663 回答