【问题标题】:Can a map use java.text.Collator?地图可以使用 java.text.Collat​​or 吗?
【发布时间】:2011-10-17 05:51:02
【问题描述】:

我使用的是 SQL Server 2008 R2。

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

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

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

【问题讨论】:

    标签: java sql sql-server-2008 collation


    【解决方案1】:

    您可以将 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"));
    

    【讨论】:

      【解决方案2】:

      您可以使用Japanese Locale 发起Collator 喜欢:

      Collator collator = Collator.getInstance( Locale.JAPANESE );
      

      然后您可以比较以下字符串:

      int comparison = collator.compare( strOne, strTwo );
      

      【讨论】:

        猜你喜欢
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        • 1970-01-01
        • 2017-07-18
        • 1970-01-01
        相关资源
        最近更新 更多