【发布时间】:2016-03-03 15:42:41
【问题描述】:
在 java 中 match var 的计算结果足够有趣(或不有趣),但在 android 中却没有:
CharSequence target = "man on";
boolean match = target.toString().matches("(\\p{L}\\p{L}+-?\\s?\\p{L}+)+");
知道为什么会这样吗?
谢谢。
PS:我通过导入和使用 Matcher 使其工作。
Pattern pattern = Pattern.compile("(\\p{L}\\p{L}+-?\\s?\\p{L}+)+");
Matcher matcher = pattern.matcher(target);
然后 matcher.matches() 在“man on”上计算为真。
【问题讨论】:
-
你为什么要在
String上打电话给toString? -
一定是关于android实现
String.matches的方式,因为你基本上只是内联了String.matches在第二种情况下的工作方式(grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/…) -
@fabian: 对不起,我把代码贴在这里了,编辑得不好。在 android 应用程序中没有
String target = "man on"目标实际上是一个 CharSequence .. :) 实际上我只是测试了它,第二个适用于“man on”而不是“man on moon”。由于 ()+ 或,应该是哪种情况?当然,在 browxy.comboolean bla = args[0].toString().matches("(\\p{L}\\p{L}+-?\\s?\\p{L}+)+");甚至适用于“月球上的人 bla 鱼”.. -
似乎您的
CharSequence错误地实现了toString()。Pattern.matcher()可以接受CharSequence参数,我相信它使用charAt()搜索匹配项 -
@SashaSalauyou,是的,一旦我更改为 Pattern/Matcher,我就放弃了 toString(),因为 matcher() 接受了 CharSequence。我刚刚测试过,使用 toString() 与否没有区别,“man on”评估为 true,任何带有第二个空格的内容(即“man on moon”)评估为 false。