繁体   English   中英

检查Java字符串是否包含Unicode字符

[英]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类具有诸如canDisplaycanDisplayUpTo之类的好东西。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM