更改java中的小写和大写字符

时间:2015-06-09 14:31:46

标签: java unicode mapping uppercase lowercase

如果我想创建一个字典,用户可以在其中创建自定义字母表(仍然使用unicode)是否有办法更改字符的小写和大写映射?

假设我希望'I'的小写字母为'ı'而不是'i'或upperCase为'b'而不是'P',以便System.out.println("PAI".toLowerCase());会写{{ 1}}到控制台。

我想我可以创建一个方法baı,首先用“b”替换“P”然后转换为小写,但在搜索成千上万个单词的字典时会不会更慢?

4 个答案:

答案 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进行维护。

对于成千上万字的词典.... 也许您使用MapHashMap,密钥将是用户输入的字符串,在对象中您可以自动保存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);
    }
}