- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试验证一些只允许使用拉丁字母的输入。为此,我正在使用下一个正则表达式:
public boolean isValidInput(String inputText) {
return inputText != null && Pattern.matches("\\p{IsLatin}+", inputText);
}
但是当我运行它时,我得到了一个PatternSyntaxException
:
FATAL EXCEPTION: main
Process: com.test, PID: 27758
java.util.regex.PatternSyntaxException: U_ILLEGAL_ARGUMENT_ERROR
\p{IsLatin}+
at java.util.regex.Pattern.compileImpl(Native Method)
at java.util.regex.Pattern.compile(Pattern.java:411)
at java.util.regex.Pattern.<init>(Pattern.java:394)
at java.util.regex.Pattern.matches(Pattern.java:424)
...
我正在使用 Java 8 并使用 Android SDK 27 进行编译。我已经在安装了 Android 6、7 和 8 的三台设备上对其进行了测试,结果相同。
我试图在 standalone Java 8 program 中运行相同的代码它工作正常。
Android regex doc页面没有说明 \p{IsLatin}
不受支持。
Classes for Unicode scripts, blocks, categories and binary properties
\p{IsLatin}
A Latin script character (script)
有什么想法吗?
最佳答案
我刚刚注意到 docs 中的这一行(感谢@Joop 指出):
Categories may be specified with the optional prefix Is: Both \p{L} and \p{IsL} denote the category of Unicode letters.
看来\p{IsLatin}
只是\p{Latin}
的别名。两者都适用于 native Java,但只有 \p{Latin}
适用于 Android(尽管 Android Studio 将其突出显示为红色并警告您这是“未知字符类别”)。
所以现在我的验证方法是这样的:
public boolean isLatinInput(String inputText) {
return inputText != null && Pattern.matches("\\p{Latin}+", inputText);
}
关于java - 尝试验证拉丁字符时出现 PatternSyntaxException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47922686/
什么错误的正则表达式可能会产生有多种原因的 PatternSyntaxException? PatternSytanxException IS-A 可抛出且具有方法 .getCause()。在使应用程
在我将语言环境切换为“fa”(波斯语)之前,我有一个运行良好的正则表达式。我怀疑希伯来语和阿拉伯语也会发生这种情况(尚不确定是字符还是 RTL 方向导致它中断)。 导致异常的代码行是: public
我正在尝试验证一些只允许使用拉丁字母的输入。为此,我正在使用下一个正则表达式: public boolean isValidInput(String inputText) { return i
我不确定为什么以下代码会给我一个PatternSyntaxException: Pattern regex = Pattern.compile("\\[[12|\\[|\\|\\||\\^\\^|\\
看下面的代码: String comment = "1)FCR pick up in Hong Kong2)Local charges will be paiy in Hong Kong & in H
我已经修改了BluetoothChat 代码,以将串行数据从微 Controller 接收到我的Android 手机。当我运行以下代码 fragment 时,它给出了 java.util.regex.
所以我有这段 Java 代码: Pattern p = Pattern.compile("* bar"); Matcher m = p.matcher("foo bar"); System.out.p
我在编译正则表达式时遇到问题。我无法找到这个表达式的问题是什么,因为我从思科文档中得到了它,并且我不明白为什么它不起作用。我希望有人能告诉我它出了什么问题。这就是我正在尝试做的事情: public v
每次我尝试使用 s.split("*"); 分割字符串 "hello*world" 时,我都会得到一个 PatternSyntaxException。 我尝试使用 s.split("\*"); 但这给
这个问题在这里已经有了答案: Replace all method throws PatternSyntaxException (1 个回答) 关闭 6 年前。 我有这段代码: buffer
我不擅长正则表达式,我正在尝试使用 java.lang.String replaceAll() 方法,代码段如下 一个是: public class method3 { public stat
我正在尝试分解通过网站上的 API 获得的数组,Java 已将其作为 String 检索。 String[] ex = exampleString.split("},{"); 抛出PatternSyn
我正在尝试分解通过网站上的 API 获得的数组,Java 已将其作为 String 检索。 String[] ex = exampleString.split("},{"); 抛出PatternSyn
我正在尝试分解通过站点上的 API 获得的数组,Java 已将其检索为 String。 String[] ex = exampleString.split("},{"); PatternSyntaxE
我正在使用 json-io用于将一些 JSON 数据转换为 Java 对象: DataTransferContainer dataTransferContainer = (DataTransferCo
我正在编写一个汇编程序,用于分析汇编代码并生成目标代码。但是,我在使用正则表达式函数之一时遇到一些问题。我没有使用java正则表达式的经验,所以我不太确定我在做什么导致这个异常。下面是抛出异常的函数。
当我尝试执行 String.ReplaceAll 时,出现模式语法异常。 下面是我的字符串 Number of testcases to execute : 39? Starting execu
当我尝试执行以下代码时 text.matches("[a-zA-Z0-9 !\"#$%&'()*+,-./:;?@[\\]^_`{|}~]"); 我遇到异常 Exception in thread "
我有一个 Java 正则表达式 Pattern,由字符串末尾的一组任意字符组成,并具有正向后向查找功能。当我在 Android 之外使用 1.6 JDK 时,它编译并运行得很好,但当我将它放入 And
我需要使用 MaltParser 1.5 版本来解析俄语句子。因此,当我尝试输入 cmd 下一个命令时: java -jar malt.jar 我遇到了下一个异常: C:\malt1.5>java -
我是一名优秀的程序员,十分优秀!