地图可以使用java.text.Collat​​or吗?

时间:2011-08-01 07:26:21

标签: java sql sql-server-2008 collation

我正在使用SQL Server 2008 R2。

我有一个从数据库中检索到的数据缓存,目前获取字符串的方法是通过map.get()。但是,代码的某些部分直接从数据库查询而不是仅使用缓存,因为这些情况需要一些连接。现在的问题是,表上的collation导致通过SQL比较(使用表格排序)和使用map.get()通过Java进行文本比较的文本比较之间的不同行为。

我已阅读java.text.Collator,但需要使用collator.Compare才能正确使用它。有没有办法强制使用固定的Collator地图。

顺便说一下,在这种情况下的排序是使用日语字符,在SQL Server中比较半宽和全宽日语是相同的。

2 个答案:

答案 0 :(得分:4)

您可以将TreeMap与为您的案例正确配置的Collat​​or一起使用。以下是大写和小写拉丁字符被视为等效的示例:

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 );