更改 java 中字符的大小写

Change lowercase and uppercase of characters in java

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

假设我希望 'I' 的小写字母是 'ı' 而不是 'i' 或者 'b' 的大写字母是 'P' 而不是 'B' 以便 System.out.println("PAI".toLowerCase());baı 写入控制台。

我想我可以创建一个方法 toLowerCase(String s),首先用 "b"s 替换 "P",然后转换为小写,但是在搜索数百个字典时不会更慢几千字?

toLowerCase(String s)使用语言环境来决定如何转换字符,你应该定义你自己的locale然后,例如,通过[=11加载它作为默认语言环境=] 在执行 toLowerCase(String s)

之前

不,它不会更慢,因为您只是遍历数组而不是修改任何对象的位置,这会导致 O(n)。性能不会受到影响,任何系统都应该能够处理单个转换,然后 toLowerCase 轻松调用。

您也可以覆盖 toLowerCase(String s) 函数以满足您的需要。更简单!

检查这个 Answer 你不能从 String Class 继承,因为它是最终的,但你可以用你的 toLowerCase 方法创建你的 class,我建议你调用 diferents 进行维护。

还有几十万字的词典.... 也许你使用 Map or HashMap 键将是用户输入的字符串,在对象中你可能会自动保存小写的值,这取决于你的需要。

但为了获得更好的性能,我建议将值保存在数据库中

问候。

这应该可以解决问题:

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