在 Java 中检查字符串是否为 ISO 语言的 ISO 国家/地区的更简洁方法

2024-03-08

假设有两个字符String,这应该代表ISO 639国家或语言名称。

你知道,Locale http://docs.oracle.com/javase/7/docs/api/java/util/Locale.htm类有两个功能getISOLanguages http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html#getISOLanguages%28%29 and getISOCountries http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html#getISOCountries%28%29返回一个数组String分别与所有 ISO 语言和 ISO 国家/地区相关。

检查是否有特定的String对象是有效的 ISO 语言或 ISO 国家/地区 我应该在该数组中查找匹配的String。好的,我可以通过使用二分搜索来做到这一点(例如Arrays.binarySearch http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#binarySearch%28T%5B%5D,%20T,%20java.util.Comparator%29或 ApacheCommonsArrayUtils.contains http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/ArrayUtils.html#contains%28java.lang.Object%5B%5D,%20java.lang.Object%29).

问题是:存在任何实用程序(例如来自Guava or 阿帕奇共享区图书馆)这提供了一种更清洁的方式,例如返回一个函数boolean验证一个String作为有效的 ISO 639 语言或 ISO 639 国家/地区?

例如:

public static boolean isValidISOLanguage(String s)
public static boolean isValidISOCountry(String s)

我不会费心使用二分搜索或任何第三方库 -HashSet适合这个:

public final class IsoUtil {
    private static final Set<String> ISO_LANGUAGES = Set.of(Locale.getISOLanguages());
    private static final Set<String> ISO_COUNTRIES = Set.of(Locale.getISOCountries());

    private IsoUtil() {}

    public static boolean isValidISOLanguage(String s) {
        return ISO_LANGUAGES.contains(s);
    }

    public static boolean isValidISOCountry(String s) {
        return ISO_COUNTRIES.contains(s);
    }
}

You could首先检查字符串长度,但我不确定我是否会打扰 - 至少不会,除非您想保护自己免受性能攻击,因为您将获得巨大的字符串,这将需要很长时间才能进行哈希处理。

编辑:如果你do想要使用第三方库,ICU4J http://icu-project.org/是最有可能的竞争者 - 但很可能有比支持的列表更新的列表Locale,因此您可能希望在任何地方都使用 ICU4J。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中检查字符串是否为 ISO 语言的 ISO 国家/地区的更简洁方法 的相关文章

随机推荐