更改java中字符的大小写
如果我想创建一个用户可以创建自定义字母表(仍然使用unicode)的字典,有没有办法更改字符的小写和大写映射 假设我希望'I'的小写字母是'I'而不是'I',或者'b'的大写字母是'p'而不是'b',这样更改java中字符的大小写,java,unicode,mapping,uppercase,lowercase,Java,Unicode,Mapping,Uppercase,Lowercase,如果我想创建一个用户可以创建自定义字母表(仍然使用unicode)的字典,有没有办法更改字符的小写和大写映射 假设我希望'I'的小写字母是'I'而不是'I',或者'b'的大写字母是'p'而不是'b',这样System.out.println(“PAI.toLowerCase())将baı写入控制台 我想我可以创建一个方法toLowerCase(strings),首先将“p”替换为“b”,然后转换为小写,但在搜索数十万个单词的字典时,这不是会更慢吗 toLowerCase(String s)使用区
System.out.println(“PAI.toLowerCase())
将baı
写入控制台
我想我可以创建一个方法
toLowerCase(strings)
,首先将“p”替换为“b”,然后转换为小写,但在搜索数十万个单词的字典时,这不是会更慢吗 toLowerCase(String s)使用区域设置来决定如何转换字符,您应该定义自己的,然后,例如,在执行toLowerCase(String s)
之前,通过locale.setDefault(locale)
将其加载为默认区域设置,它不会变慢,因为您只是遍历数组,而不会修改任何对象的位置,这将导致O(n)。性能不会受到影响,任何系统都应该能够轻松地处理单个转换,然后toLowerCase
调用
您还可以重写toLowerCase(String s)
函数以满足您的需要。更简单 检查此项您不能从String类继承,因为它是final,但您可以使用toLowerCase方法创建类,我建议您调用different进行维护
还有数十万字的字典。。。。
也许你使用了一个或,键将是用户输入的字符串,你可能会在对象中自动保存小写的值,这取决于你需要什么
但为了获得更好的性能,我建议将值保存在数据库中
问候 这应该可以做到:
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);
}
}
import java.util.HashMap;
导入java.util.Map;
类MyString{
字符串字符串;
静态最终地图toLowerCaseMap、ToUpper CaseMap;
静止的{
toLowerCaseMap=新HashMap();
toLowerCaseMap.put('I','|');
toUpperCaseMap=新HashMap();
toUpperCaseMap.put('b','P');
}
MyString(字符串){
this.string=string;
}
字符串toLowerCase(){
char[]chars=string.toCharArray();
for(int i=0;i
我的直觉是,它比在一本包含数十万个单词的字典中搜索要快……我所说的方法将首先替换然后使用toLowerCase()它怎么能更快?如果你已经想出了一个更快的方法,请解释。答案很好,但我建议使用到小写(locale)
一个人不能定义自己的语言环境
:构造函数是私有的
,扩展也是不可能的,因为类是最终的
。后者也适用于String
类。您不能重写toLowerCase
,因为String
类是final
。我需要对此进行详细说明。在我有10个自定义映射的情况下,我需要调用string.replaceAll(大写,小写)每个单词的代码>10次。这怎么会不慢呢down@HummelingEngineering我们不能重写String.toLowerCase()
,但我们可以重写定制的toLowerCase(String s)
methodTrue,我忘了。上面的答案提到创建自己的字符串类实现,这是更好的答案。@WVrock是的,但这仍然只是遍历数组,而不是修改该数组中任何数据的位置。你只是简单地对一个角色执行两个动作,然后继续执行下一个动作,所以你不会看到一个性能上的成功。当然,完成转换的时间会随着提供的词典的大小而增加,但这不是一个大问题,也没有办法解决。键的映射不起作用。我希望半书写的单词能够找到最接近的匹配项。就像“学校”找到“学校”。这个答案恐怕超出了我的java知识范围。也许有一天我会试试。看来我看错了答案。使用字符串包装器(在性能上)与创建toLowerCase(字符串s)方法没有什么不同。因此,为了实现这一功能,我建议您尝试使用数据库层实现逻辑,因为当用户输入到数据库并搜索“user\u Input\u%”之类的WHERE字段时,您可以附加一个偶数侦听器,所以我做了基准测试,这与简单地执行“PAI.toLowerCase()所用的时间大致相同;虽然我不确定是应该使用字符串包装器还是创建静态StringManager。@WVrock不要打断你的头,两个都试试!