当前位置: 首页 > 面试题库 >

string.matches(“。*”)返回false

桂智志
2023-03-14
问题内容

在我的程序中,我有一个字符串(从外部库获取),该字符串与任何正则表达式都不匹配。

String content = // extract text from PDF
assertTrue(content.matches(".*")); // fails
assertTrue(content.contains("S P E C I A L")); // passes
assertTrue(content.matches("S P E C I A L")); // fails

知道有什么问题吗?当我打印content到标准输出时,看起来还可以。

这是从PDF提取文本的代码(我正在使用iText 5.0.1):

PdfReader reader = new PdfReader(source);
PdfTextExtractor extractor = new PdfTextExtractor(reader,
    new SimpleTextExtractingPdfContentRenderListener());
return extractor.getTextFromPage(1);

问题答案:

默认情况下,.不匹配的换行符。所以我的猜测是您content包含换行符。

还要注意,matches它将匹配整个字符串,而不仅仅是字符串的一部分:它不会做什么contains

一些例子:

String s = "foo\nbar";
System.out.println(s.matches(".*"));       // false
System.out.println(s.matches("foo"));      // false
System.out.println(s.matches("foo\nbar")); // true
System.out.println(s.matches("(?s).*"));   // true

(?s)最后一个例子将导致.匹配换行符也是如此。因此(?s).*将匹配任何字符串。



 类似资料:
  • 问题内容: 即使正则表达式应返回true,程序也不会退出。代码有什么问题? 问题答案: 仅当整个字符串与正则表达式匹配时才返回。在你的情况下,你的正则表达式仅代表 一个 字符不是,或。 我怀疑您要检查字符串是否包含您在正则表达式中描述的这些特殊字符之一。在这种情况下,请将您的正则表达式括起来,以使正则表达式匹配整个字符串。哦,您不必逃脱character class内部。

  • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:

  • 问题内容: String.matches和Matcher.matches有什么区别?在性能或其他方面是否有差异? 问题答案: 绝对。A 是在预编译的正则表达式上创建的,而每次执行时都必须重新编译正则表达式,因此您越频繁地运行该行代码,它就变得越来越浪费。

  • 我有一小段代码 本来是要打印的 但它什么也没打印!!

  • 问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方

  • 我想在下面返回JSON。 {“名字”:“杰基”} 新来的春靴在这里。1天大。有没有合适的方法可以做到这一点?