如果我想创建一个字典,用户可以在其中创建自定义字母表(仍然使用unicode)是否有办法更改字符的小写和大写映射?
假设我希望'I'的小写字母为'ı'而不是'i'或upperCase为'b'而不是'P',以便System.out.println("PAI".toLowerCase());
会写{{ 1}}到控制台。
我想我可以创建一个方法baı
,首先用“b”替换“P”然后转换为小写,但在搜索成千上万个单词的字典时会不会更慢?
答案 0 :(得分:1)
toLowerCase(String s)
使用区域设置决定如何转换字符,您必须定义自己的locale然后,例如,通过Locale.setDefault(Locale)
将其加载为默认区域设置在执行toLowerCase(String s)
答案 1 :(得分:1)
不,它不会慢,因为你只是遍历数组而不是修改任何会导致O(n)的对象的位置。性能不会受到影响,任何系统都应该能够处理单个转换,然后toLowerCase
轻松调用。
您还可以覆盖toLowerCase(String s)
功能以满足您的需求。更简单!
答案 2 :(得分:0)
检查这个Answer你不能继承String Class,因为它是最终的,但是你可以使用toLowerCase方法创建你的类,我建议你调用diferents进行维护。
对于成千上万字的词典.... 也许您使用Map或HashMap,密钥将是用户输入的字符串,在对象中您可以自动保存lowerCase中的值,这取决于您的需要。
但为了获得更好的性能,我建议保存数据库中的值
的问候。
答案 3 :(得分:0)
这应该可以解决问题:
import java.util.HashMap;
import java.util.Map;
class MyString {
String string;
static final Map<Character, Character> toLowerCaseMap, toUpperCaseMap;
static {
toLowerCaseMap = new HashMap<>();
toLowerCaseMap.put('I', '|');
toUpperCaseMap = new HashMap<>();
toUpperCaseMap.put('b', 'P');
}
MyString(String string) {
this.string = string;
}
String toLowerCase() {
char[] chars = string.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
chars[i] = toLowerCaseMap.containsKey(c) ? toLowerCaseMap.get(c) : Character.toLowerCase(c);
}
return new String(chars);
}
String toUpperCase() {
char[] chars = string.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
chars[i] = toUpperCaseMap.containsKey(c) ? toUpperCaseMap.get(c) : Character.toUpperCase(c);
}
return new String(chars);
}
}