Usm*_*eed 5 java regex android arabic urdu
我想知道文本是否包含乌尔都语或阿拉伯语的任何字母..使用这种条件会在出现特殊字符时产生错误的结果。什么是正确的方法。
if (cap.replaceAll("\\s+", "").matches("[A-Za-z]+")
|| cap.replaceAll("\\s+", "").matches("[A-Za-z0-9]+")) {
Log.d("isUrdu", "false");
caption.setTypeface(Typeface.DEFAULT);
caption.setTextSize(16);
} else {
Log.d("isUrdu", "True");
/* if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1) {*/
caption.setTypeface(typeface);
caption.setTextSize(20);
/* }*/
}
Run Code Online (Sandbox Code Playgroud)
看一下维基百科乌尔都语字母表,它包括以下 Unicode 范围:
\n\nU+0600 to U+06FF\nU+0750 to U+077F\nU+FB50 to U+FDFF\nU+FE70 to U+FEFF\nRun Code Online (Sandbox Code Playgroud)\n\n要匹配阿拉伯字母,您可以使用\\p{InArabic}Unicode 属性类。
所以,你可以使用
\n\nif (cap.matches("(?s).*[\\\\u0600-\\\\u06FF\\\\u0750-\\\\u077F\\\\uFB50-\\\\uFDFF\\\\uFE70\xe2\x80\x8c\xe2\x80\x8b-\\\\uFEFF].*"))\n{\n /*There is an Urdu character*/\n} \nelse if (cap.matches("(?s).*\\\\p{InArabic}.*"))\n{ \n /* The string contains an Arabic character */ \n}\nelse { /*No Arabic nor Urdu chars detected */ }\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,(?s)启用DOTALL修饰符,以便.也可以匹配换行符。
为了获得更好的性能matches,您可以分别使用反向类而不是第一个.*:"(?s)[^\\\\u0600-\\\\u06FF\\\\u0750-\\\\u077F\\\\uFB50-\\\\uFDFF\\\\uFE70\xe2\x80\x8c\xe2\x80\x8b-\\\\uFEFF]*[\\\\u0600-\\\\u06FF\\\\u0750-\\\\u077F\\\\uFB50-\\\\uFDFF\\\\uFE70\xe2\x80\x8c\xe2\x80\x8b-\\\\uFEFF].*"和"(?s)\\\\P{InArabic}*\\\\p{InArabic}.*"。
请注意,您还可以使用更短的"[\\\\u0600-\\\\u06FF\\\\u0750-\\\\u077F\\\\uFB50-\\\\uFDFF\\\\uFE70\xe2\x80\x8c\xe2\x80\x8b-\\\\uFEFF]"和"\\\\p{InArabic}"模式Matcher#find()。
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |