]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/classes/core/src/com/ibm/icu/util/CaseInsensitiveString.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / classes / core / src / com / ibm / icu / util / CaseInsensitiveString.java
1 /**\r
2  *******************************************************************************\r
3  * Copyright (C) 2001-2007, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.util;\r
8 \r
9 import com.ibm.icu.lang.UCharacter;\r
10 \r
11 /**\r
12  * A string used as a key in java.util.Hashtable and other\r
13  * collections.  It retains case information, but its equals() and\r
14  * hashCode() methods ignore case.\r
15  * @stable ICU 2.0\r
16  */\r
17 public class CaseInsensitiveString {\r
18     \r
19     private String string;\r
20 \r
21     private int hash = 0;\r
22     \r
23     private String folded = null;\r
24     \r
25     private static String foldCase(String foldee)\r
26     {\r
27         return UCharacter.foldCase(foldee, true);\r
28     }\r
29     \r
30     private void getFolded()\r
31     {\r
32         if (folded == null) {\r
33             folded = foldCase(string);\r
34         }\r
35     }\r
36     \r
37     /**\r
38      * Constructs an CaseInsentiveString object from the given string\r
39      * @param s The string to construct this object from \r
40      * @stable ICU 2.0\r
41      */\r
42     public CaseInsensitiveString(String s) {\r
43         string = s;\r
44     }\r
45     /**\r
46      * returns the underlying string \r
47      * @return String\r
48      * @stable ICU 2.0\r
49      */\r
50     public String getString() {\r
51         return string;\r
52     }\r
53     /**\r
54      * Compare the object with this \r
55      * @param o Object to compare this object with \r
56      * @stable ICU 2.0\r
57      */\r
58     public boolean equals(Object o) {\r
59         getFolded();\r
60         \r
61         try {\r
62             CaseInsensitiveString cis = (CaseInsensitiveString) o;\r
63             \r
64             cis.getFolded();\r
65             \r
66             return folded.equals(cis.folded);\r
67         } catch (ClassCastException e) {\r
68             try {\r
69                 String s = (String) o;\r
70                 \r
71                 return folded.equals(foldCase(s));\r
72             } catch (ClassCastException e2) {\r
73                 return false;\r
74             }\r
75         }\r
76     }\r
77     \r
78     /**\r
79      * Returns the hashCode of this object\r
80      * @return int hashcode\r
81      * @stable ICU 2.0\r
82      */\r
83     public int hashCode() {\r
84         getFolded();\r
85         \r
86         if (hash == 0) {\r
87             hash = folded.hashCode();\r
88         }\r
89         \r
90         return hash;\r
91     }\r
92     \r
93     /**\r
94      * Overrides superclass method\r
95      * @stable ICU 3.6\r
96      */\r
97     public String toString() {\r
98         return string;\r
99     }\r
100 }\r