java和android之间的模式匹配差异?

java和android之间的模式匹配差异?,java,android,regex,Java,Android,Regex,有趣的是(或不是),在java中,match var的计算结果为true,但在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}+

有趣的是(或不是),在java中,match var的计算结果为true,但在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”上的计算结果为true。

我认为这里的问题在于
CharSequence
方法的实现不正确,或者在
target
的实际类中缺少重写的
toString()


Pattern#matcher(target)
接受
CharSequence
String#matches()
操作
String
。如果
target.toString()
返回的字符串不等于
target

的实际内容,则结果可能会有所不同。为什么对
字符串调用
toString
?必须与安卓实现
string.matches的方式有关,因为您基本上只是内联了
String.matches
在第二种情况下的工作方式()@fabian:对不起,我将代码粘贴在这里,并对其进行了糟糕的编辑。在android应用程序中没有
String target=“man on”
target实际上是一个字符序列:)事实上,我刚刚测试了它,第二个适用于“月球上的人”,但不适用于“月球上的人”。由于()或()的原因,应该是哪种情况?当然,在browxy.com
boolean bla=args[0].toString()匹配(“\\p{L}\\p{L}+-?\\s?\\p{L}+”
甚至适用于“月球上的人布拉鱼”。似乎您的
CharSequence
错误地实现了
toString()
Pattern.matcher()
可以接受
CharSequence
参数,我相信,在该参数中,它使用
charAt()
@SashaSalauyou()搜索匹配项,是的,一旦我更改为Pattern/matcher,我就删除了toString(),因为matcher()接受CharSequence。我刚刚测试过,使用toString()与否没有区别,“人在”的计算结果为真,任何带有第二个空格的东西(即“人在月球上”)的计算结果为假。