繁体   English   中英

在Java中使用变量赋值执行if / else分支的更有效方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM