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

您知道 Locale 类具有两个函数 getISOLanguages getISOCountries ,它们分别返回具有所有ISO语言和ISO国家/地区的String数组。

要检查特定的String对象是否是有效的ISO语言或ISO国家/地区,我应该在数组中查找匹配的String。好的,我可以使用二进制搜索(例如 Arrays.binarySearch 或ApacheCommons ArrayUtils.contains )来做到这一点。

问题是:存在任何提供更简洁方法的实用程序(例如来自Guava或Apache Commons库)。返回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 = new HashSet<String>
        (Arrays.asList(Locale.getISOLanguages()));
    private static final Set<String> ISO_COUNTRIES = new HashSet<String>
        (Arrays.asList(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);
    }
}

您可以先检查字符串的长度,但是我不确定是否会打扰-至少不会,除非您想保护自己免受性能攻击,因为在这种情况下,您会收到大量字符串,这些哈希将花费很长时间进行哈希处理。

编辑:如果您确实想使用第三方库,ICU4J是最有可能的竞争者-但它可能比Locale支持的列表具有最新列表,因此您可能想在任何地方使用ICU4J ,大概。

关于java - 检查字符串是否是Java中ISO语言的ISO国家/地区的更简洁方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15921332/

10-14 12:09