2016-03-03 104 views
0

够搞笑(或没有)在Java中比赛VAR值为true,但是在android系统它不:java和android之间的模式匹配差异?

CharSequence target = "man on"; 
boolean match = ​target.toString().matches("(\\p{L}\\p{L}+-?\\s?\\p{L}+)+"); 

任何想法,为什么出现这种情况?

谢谢。

聚苯乙烯:我通过导入和使用Matcher工作。

Pattern pattern = Pattern.compile("(\\p{L}\\p{L}+-?\\s?\\p{L}+)+"); 
Matcher matcher = pattern.matcher(target); 

然后matcher.matches()在“man on”上的计算结果为true。

+2

为什么你在'String'上调用'toString'? – fabian

+0

必须是android实现'String.matches'的方式,因为基本上只是内联了'String.matches'在第二种情况下的工作方式(http://grepcode.com/file/repository.grepcode.com /java/root/jdk/openjdk/6-b14/java/lang/String.java#2101) –

+1

@fabian:对不起,我在这里粘贴了代码,编辑得很差。在Android应用程序中没有 'String target =“man on”' 目标实际上是一个CharSequence .. :) 其实我只是测试它,第二个适用于“man on”,但不适用“moon on man” 。 ()+或?应该是这种情况。 当然在browxy.com上 'boolean bla = args [0] .toString()。matches(“(\\ p {L} \\ p {L} + - ?\ s?\\ p {L } +)+“);' 甚至适用于”月球上的男人bla鱼“.. – cristian

回答

0

我相信这里的问题是不正确的实施方法CharSequence,或重写toString()由于缺少的实际类的target

Pattern#matcher(target)接受CharSequence,String#matches()String进行操作。如果target.toString()返回的字符串不等于target的实际内容,则结果可能会不同。