[英]More efficient way to do if/else branch with variable assignment in Java
变量“ varOptions”是通过扫描仪获得的。 基本上,我希望: [A, B, C, D, E, F]
变为: [0, 1, 2, 3, 4, 5]
。 保持代码不区分大小写也非常重要。 当前,此代码相当庞大。 我想知道是否有办法提高效率?
if ("A".equalsIgnoreCase(varOptions)) {
int varOpt = 0;
} else if ("B".equalsIgnoreCase(varOptions)) {
int varOpt = 1;
} else if ("C".equalsIgnoreCase(varOptions)) {
int varOpt = 2;
} else if ("D".equalsIgnoreCase(varOptions)) {
int varOpt = 3;
} else if ("E".equalsIgnoreCase(varOptions)) {
int varOpt = 4;
} else if ("F".equalsIgnoreCase(varOptions)) {
int varOpt = 5;
}
如果尚未将varOptions变量转换为字符(相对于字符串),则将其转换为字符。 一旦它是一个字符,就可以将其转换为整数,这会将字符转换为其ASCII码。 “ A”字符的ASCII码为65。B为66。C为67,依此类推。
要保持不区分大小写,请先将字符转换为大写,然后再转换为整数。
因此,将其强制转换为整数后,只需减去65,就可以得到0到5之间的数字:
int varOpt = (int)Character.toUppercase(varOptions);
varOpt -= 65;
上面假定的varOptions上面的代码已经是char类型的。 请注意,不需要为int的大小写,而是提高了可读性。 一个人可以很容易做到:
int varOpt = Character.toUppercase(varOptions);
完整的代码示例,假设varOptions是字符串:
char varOptChar = varOptions.charAt(0); // grab first character
int varOpt = (int)Character.toUppercase(varOptChar);
varOpt = varOpt - 65;
对于您的示例,varOpt现在应该在0到5之间。 要了解这一点,您需要了解字符在计算机中具有十进制表示形式。 计算机仅看到数字65,但是知道该数字表示大写的A。65被称为ASCII码; 您可以在此处找到ASCII码表: http : //www.asciitable.com/
int varOpt = Character.toUppercase( varOptions.charAt(0) ) - 'A'; // assuming varOptions is String
要么
int varOpt = Character.toUppercase( varOptions ) - 'A'; // assuming varOptions is char
您还可以在String
上使用switch
:
int varOpt;
switch( varOptions.toUpperCase() ) {
case "A":
varOpt = 0; break;
case "B":
varOpt = 1; break;
// etc
}
或使用Map
,如果您打算在连续范围内执行简单的char-to-int映射以外的其他操作。
怎么样:
int varOpt = " ABCDEF".indexOf(varOptions.toUpperCase());
它不是那么漂亮,但是你可以做这样的事情
Map<String, Integer> map = new HashMap<String, Integer>()
{{
put("A", 1);
put("B", 2);
put("C", 3);
put("D", 4);
put("E", 5);
put("F", 6);
}};
// varOpt will be null if it is not in the map
int varOpt = map.get(varOptions.toUpperCase());
另一种方法是将字母解析为十六进制数字并减去11:
int varOpt = Integer.parseInt(varOptions, 16) - 0xA;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.