[英]Check if java string contains unicode character
我试图检查字符串是否包含来自Segoe MDL2 Assets字体的特定unicode点。
我要检查的unicode值的示例是
\uF14B
这是我从中获取价值的地方
https://docs.microsoft.com/zh-cn/windows/uwp/design/style/segoe-ui-symbol-font
如何准确地检查字符串以查看其中是否包含这些值之一?
我努力了
if (buttons[i].getText().contains("\uF14B")) {
buttons[i].setFont(new Font("Segoe MDL2 Assets", Font.PLAIN, 15 ));
}
尽管这确实可行,但我认为必须将我计划使用的每个值都复制并粘贴到if语句中,这效率很低。
有没有更简单的方法可以做到这一点?
编辑:
我最终在数组中的每个特殊字符后放置一个〜,然后像这样解析它。 这样做有什么问题吗?
/** Creating the names of the buttons. */
String [] buttonNames = {
"Lsh", "Rsh", "Or", "Xor", "Not","And",
"\uE752~", "Mod", "CE", "C", "\uF149~", "\uE94A~",
"A", "B", "\uF14D~", "\uF14E~", "\uE94F~", "\uE947~",
"C", "D", "\uF14A~", "\uF14B~", "\uF14C~", "\uE949~",
"E", "F", "\uF14A~", "\uF14B~", "\uF14C~", "\uE948~",
"(", ")", "\uE94D~", "0", ".", "\uE94E~"
};
/** more code here */
if (buttons[i].getText().contains("~")) {
buttons[i].setFont(new Font("Segoe MDL2 Assets", Font.PLAIN, 15 ));
buttons[i].setText(buttons[i].getText().substring(0, buttons[i].getText().lastIndexOf('~')));
}
您可以反转字体选择逻辑:
Font
类具有诸如canDisplay
和canDisplayUpTo之类的好东西。 Javadoc:
public int canDisplayUpTo(String str)
指示此字体是否可以显示指定的字符串。 对于使用Unicode编码的字符串,了解特定字体是否可以显示该字符串非常重要。 此方法将偏移量返回给String str,这是该Font不使用缺少的字形代码就无法显示的第一个字符。 如果字体可以显示所有字符,则返回-1。
扫描文本以查找某些字符的最佳/最简单方法是使用正则表达式字符类。
字符类写为[xxx]
,其中xxx
可以设置单个字符,例如a
或\
,和/或范围,例如az
或\-\
。
因此,您可以编写这样的正则表达式:
[\uE700-\uE72E\uE730\uE731\uE734\uE735\uE737-\uE756]
依此类推(大约是链接页面上代码点列表的10%) 。
以上也可以使用排除来完成,即
[\uE700-\uE756&&[^\uE72F\uE732\uE733\uE736]]
[^xxx]
意思是“这些字符中的任何一个都不是”。
然后,您编译它并使用它检查字符串:
String regex = "[\uE700-\uE72E\uE730\uE731\uE734\uE735\uE737-\uE756]";
Pattern p = Pattern.compile(regex);
if (p.matcher(buttons[i].getText()).find()) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.