假设有两个字符的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/