gpt4 book ai didi

java - 为什么此正则表达式不适用于 Java 7?

转载 作者:搜寻专家 更新时间:2023-11-01 03:06:18 26 4
gpt4 key购买 nike

根据 How to determine whether a character is a letter in Java? 的回答我在用下面的代码片段匹配字符串是否在开头包含 unicode 字母。它在 unicode 字符的 Java 6 上运行良好\u0374 未被视为 unicode 字母

 boolean test = "\u0374100".matches("[\\p{L}].*");; returns true on java 7 whereas it return false java 6.

关于这个观点,Java 7 有什么变化吗?如果是,如何让 Java 6 的东西在 Java 7 上运行?

最佳答案

根据 Fileformat.Info: Unicode Character 'GREEK NUMERAL SIGN' (U+0374) ,类别为“字母,修饰符 [Lm]”。它还表示 Character.isLetter() 的结果是 Yes

现在将其与 Unicode Character 'GREEK LOWER NUMERAL SIGN' (U+0375) 进行对比其类别为“符号,修饰符 [Sk]”。根据页面,Character.isLetter() 的结果是No

Java 7 根据 Character javadoc 使用 Unicode 6.0.0和 Internationalization Enhancements in Java SE 7 ,而 Java 6 使用 Unicode 4.0(请参阅 Character javadocJava Language Specification 5.0(适用于 Java 5 和 6))。

原因是 unicode 现在将 U+0374 定义为“字母,修饰符”。查看 Unicode 4.0.0 的 unicode 数据库和 Unicode 6.0.0很明显,定义从 Sk 更改为 Lm:

4.0 版:

0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;

版本 6.0.0:

0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;;;;

换句话说:你的正则表达式工作正常,只是字符定义发生了变化,所以它现在被认为是一个字母,而不是一个符号。

关于java - 为什么此正则表达式不适用于 Java 7?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21140343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com