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

3
我将尝试检查一个字符串是否包含来自Segoe MDL2 Assets字体的特定Unicode点。
我想要检查的Unicode值的示例为
\uF14B

这是我获取值的位置

https://learn.microsoft.com/en-us/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('~')));
            }

我的意思是,我如何检查我的字符串是否包含unicode值。例如,检查一个字符串是否包含\u(尽管我知道这实际上不起作用)。 - Thomas Walker
你可以使用 Matcher 来完成这个任务。 - Jojo Narte
一个 F1xx 系列字符并不是字体,甚至不是真正的“字符”,因为它没有分配的字形或含义。基本上,“私有使用”就是这样,任何人都可以将其用于任何目的。我认为一些网站使用相同的代码点来绘制随机图形符号,如线条、拐角和箭头,以帮助绘制他们的用户界面。 - markspace
可能已经找到了一个我能轻松理解的解决方案。 - Thomas Walker
"我最终在我的数组中的每个特殊字符后面放置了一个符号"。哪个数组?如果您在按钮文本中放置``字符,那么按钮不会看起来很奇怪吗? - Andreas
显示剩余2条评论
2个回答

3

在IT技术领域,查找文本中特定字符最好/最简单的方法是使用正则表达式字符类。

字符类的写法为[xxx],其中xxx可以是一组单个字符,例如a\uF14B,也可以是一组范围,例如a-z\uE700-\uE71F

因此,你可以编写如下的正则表达式:

[\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()) {

我想出了一种自己实现的方法,你能检查一下这种做法是否可行吗? - Thomas Walker

3
你可以反转字体选择逻辑: Font类拥有一些好用的东西,比如canDisplaycanDisplayUpTo。请参考Javadoc:
public int canDisplayUpTo​(String str)

指示此字体是否能够显示指定的字符串。对于Unicode编码的字符串,了解特定字体是否能够显示该字符串非常重要。此方法返回一个偏移量,该偏移量是字符串中第一个字符,该字体不能显示而不使用缺失的字形代码。如果字体可以显示所有字符,则返回-1。


太棒了。非常感谢你。如果没有你的帮助,我不可能找到这个。你为我节省了大约50行代码。 - Thomas Walker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接