gpt4 book ai didi

java - 我的 Android 应用程序中的\\p{Punct} 行为

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:45 25 4
gpt4 key购买 nike

这是我的正则表达式 - “[\\w\\d\\p{Punct}]+”

在我的应用程序中,\\p{Punct} 的行为非常奇怪。根据文档(https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html):

\p{Punct} - Punctuation: One of !"#$%&'()*+,-./:;<=>?@[]^_`{|}~

但在我的应用程序中,此标签始终忽略以下字符:“$”、“+”、“<”、“>”、“=”、“^”、“`”、“|”、“~”

abc!d => true
abc#d => true
abd$d => false
abc<>d = > false

等等

我尝试使用

Pattern pattern = Pattern.compile("[\w\d\p{Punct}]+", Pattern.UNICODE_CASE);

没有效果。

有什么建议我做错了什么吗?

附注:我使用 TextWatcher。我这样做是这样的:

    TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// I am checking it here
// if if(!s.toString().matches("[\\w\\d\\p{Punct}]+")) => do something
}

@Override
public void afterTextChanged(Editable s) {

}



};

当我将此 TextWatcher 添加到 MyEditText 时:

myEditText.addTextChangedListener(textWatcher);

最佳答案

问题是 \p{Punct} 与 POSIX [:punct:] 字符类符号相匹配,还包含符号 \p{S}

为了避免匹配没有您需要的符号的字符串:

"^[\\w\\p{P}]+$"

另请注意,在 Android 上,\w\p{P}\p{S} 默认情况下支持 Unicode。

此外,\w 已经匹配数字,因此没有必要将 \w\d 添加到同一字符类 [...] 中。

关于java - 我的 Android 应用程序中的\\p{Punct} 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37252227/

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