我正在使用SQL Server 2008 R2。
我有一个从数据库中检索到的数据缓存,目前获取字符串的方法是通过map.get()
。但是,代码的某些部分直接从数据库查询而不是仅使用缓存,因为这些情况需要一些连接。现在的问题是,表上的collation
导致通过SQL比较(使用表格排序)和使用map.get()
通过Java进行文本比较的文本比较之间的不同行为。
我已阅读java.text.Collator
,但需要使用collator.Compare
才能正确使用它。有没有办法强制使用固定的Collator
地图。
顺便说一下,在这种情况下的排序是使用日语字符,在SQL Server中比较半宽和全宽日语是相同的。
答案 0 :(得分:4)
您可以将TreeMap与为您的案例正确配置的Collator一起使用。以下是大写和小写拉丁字符被视为等效的示例:
Collator collator = Collator.getInstance(Locale.FRENCH);
collator.setStrength(Collator.PRIMARY);
Map<String, String> map = new TreeMap<String, String>(collator);
map.put("ABC", "foo");
System.out.println(map.get("abc"));
答案 1 :(得分:0)
您可以使用Collator
Japanese
启动Locale
,例如:
Collator collator = Collator.getInstance( Locale.JAPANESE );
然后你可以比较字符串:
int comparison = collator.compare( strOne, strTwo );