我正在编写将罗马数字转换为十进制数字的代码。
我想知道是否可以优化此行?
String s = "MCMXCIV";
String code = s.replaceAll("I", "a")
.replaceAll("V", "b")
.replaceAll("X", "c")
.replaceAll("L", "d")
.replaceAll("C", "e")
.replaceAll("D", "f")
.replaceAll("M", "g");
code
的期望值:gegceab
编辑1 :可以用较短的方式编写相同的代码吗?
编辑2 :
我想要两个条件
O(1)
中的相应代码替换每个字符答案 0 :(得分:1)
我不知道这如何帮助您将罗马数字转换为十进制数字,但是可以肯定的是,这可以简化!
对于初学者来说,replaceAll
确实做得更好('replace
是一个愚蠢的名称;第一个参数是正则表达式。private static final String LETTERS = "IVXLCDM";
char[] cs = s.toCharArray();
for (int i = 0; i < cs.length; i++) {
cs[i] = 'a' + LETTERS.indexOf(cs[i]);
}
String code = new String(cs);
,也没有全部, 替换掉所有内容,并采用一个实际的原始字符串,这正是您想要的-Java不喜欢破坏向后兼容性;愚蠢的名称不太可能得到纠正)。
第二,“较短”大部分是没有意义的。编写代码的相关目标是可读性和灵活性,很少是效率(性能);矮个子本身并不是一个相关的目标。
这是另一种选择。对于大型字符串,它的效率明显更高。对于小字符串,这是2020年,所需时间将舍入为0。
{{1}}
答案 1 :(得分:1)
您可以使用两个数组并遍历它们,将from[i]
替换为to[i]
。
String s = "MCMXCIV";
char[] from = new char[]{'I', 'V', 'X', 'L', 'C', 'D', 'M'};
char[] to = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g'};
for (int i = 0; i < from.length; i++){
s = s.replace(from[i], to[i]);
}