Java检查字符串变量长度(带子串)

时间:2015-11-24 08:30:17

标签: java string if-statement substring case

我有一个String变量,每次运行时都可以有不同的长度。 有了它,我会检查它的开头,例如:

 public void defineLocation(){
            if (newLocation.substring(0,2).equals("DO") || newLocation.substring(0,2).equals("30") || newLocation.substring(0,2).equals("21")) {
                locationInDc = "DOOR";
            } else if (newLocation.substring(0,2).equals("VT") || newLocation.substring(0,3).equals("MUF")) {
                locationInDc = "BLOUBLOU";
            } else if (newLocation.substring(0,3).equals("MAH")) {
                locationInDc = "BLOBLO";           
            } else if (newLocation.substring(0,7).equals("Zone 72") || newLocation.substring(0,7).equals("Zone 70")){
                locationInDc = "BLOFBLOF";
}

我知道这不是最有效的方法,它必然会破坏,如果我的变量不在前3个检查中的任何一个但仍然具有比7更少的字符,那么它将抛出错误。

有更“正确”的方法吗?我应该首先检查字符串包含多少个字符,然后将其指向正确的检查/“ifs”?谢谢。

2 个答案:

答案 0 :(得分:8)

由于您的所有检查都在测试字符串的开头,因此请使用startsWith而不是substringequals,您不必担心newLocation太短了。

例如,替换

if (newLocation.substring(0,2).equals("DO") || newLocation.substring(0,2).equals("30") || newLocation.substring(0,2).equals("21")) 

if (newLocation.startsWith ("DO") || newLocation.startsWith ("30") || newLocation.startsWith ("21")) 

答案 1 :(得分:2)

使用string.startWith进行检查,并使用Map进行映射。

Map<String,String> map = new HashMap<String,String>();
map.put("DO", "DOOR");
map.put("30", "DOOR");
map.put("21", "DOOR");
map.put("VT", "BLOUBLOU");
map.put("MUF", "BLOUBLOU");
map.put("MAH", "BLOBLO");
map.put("Zone 72", "BLOFBLOF");
map.put("Zone 70", "BLOFBLOF");

for (Entry<String, String> entry : map.entrySet()) {
    if (newLocation.startsWith(entry.getKey())) {
        locationInDc = entry.getValue();
        break;
    }
}