问题1: java switch语句
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
问题二:String类型和char类型的转换
String转换为char
1. 使用String.charAt(index)
(返回值为char)可以得到String中某一指定位置的char。
2. 使用String.toCharArray()
(返回值为char[])可以得到将包含整个String的char数组。这样我们就能够使用从0开始的位置索引来访问string中的任意位置的元素。
char转换为String
1. String s = String.valueOf('c'); //效率最高的方法
2. String s = String.valueOf(new char[]{'c'}); //将一个char数组转换成String
3. String s = Character.toString('c');
4. String s = new Character('c').toString();
5. String s = "" + 'c';
// 虽然这个方法很简单,但这是效率最低的方法
// Java中的String Object的值实际上是不可变的,是一个final的变量。
// 所以我们每次对String做出任何改变,都是初始化了一个全新的String Object并将原来的变量指向了这个新String。
// 而Java对使用+运算符处理String相加进行了方法重载。
// 字符串直接相加连接实际上调用了如下方法:
// new StringBuilder().append("").append('c').toString();
6. String s = new String(new char[]{'c'});
题解:
class Solution {
public int romanToInt(String s) {
int len = s.length();
char[] tem = s.toCharArray();
int sum = 0;
String pri = "I, V, X, L, C, D, M";
for (int i = 0; i < len; i++) {
switch (tem[i]){
case 'I':
if ((i+1) != len && tem[i+1] == 'V'){
sum += 4;
i++;
}else if ((i+1) != len && tem[i + 1] == 'X'){
sum += 9;
i++;
}else {
sum += 1;
}
break;
case 'v':
sum += 5;
break;
case 'x':
if ((i+1) != len && tem[i+1] == 'L'){
sum += 40;
i++;
}else if ((i+1) != len && tem[i + 1] == 'C'){
sum += 90;
i++;
}else {
sum += 10;
}
break;
case 'L':
sum += 50;
break;
case 'C':
if ((i+1) != len && tem[i+1] == 'D'){
sum += 400;
i++;
}else if ((i+1) != len && tem[i + 1] == 'M'){
sum += 900;
i++;
}else {
sum += 100;
}
break;
case 'D':
sum += 500;
break;
case 'M':
sum += 1000;
break;
}
}
return sum;
}
}
思路:
switch + if 进行判断,然后特殊情况进行超前的检索,注意不要越界。