2014-02-09 12 views
1

我想寫一個if語句來找出給定的郵政編碼(郵政編碼)是否在給定的郵政編碼範圍內。如何找到一個字符串是否在給定的字符串範圍內

例如,我想知道如何找到,如果J8Q是在J8P-J9A的範圍內(在這種情況下)

我寫了這個:

public boolean postCodeInRange(String postCode, String zone) 
{ 
    if (zone.charAt(0)==postCode.charAt(0)) 
    { 
     if ((int) postCode.charAt(1) >= (int) zone.charAt(1) && 
      (int) postCode.charAt(1) <= (int) zone.charAt(5) && 
      (int) postCode.charAt(2) >= (int) zone.charAt(2) && 
      (int) postCode.charAt(2) <= (int) zone.charAt(6)) 

      return true; 
    } 
    return false; 
} 

這隻適用於拉鍊代碼如L4JL0A-L9Z範圍內。

+0

而且應該支持哪些其他範圍? –

回答

0

簡單的解決方案:

public boolean postCodeInRange(String postCode, String zone) { 
    return postCode.compareTo(zone.substring(0, 3)) >= 0 
     && postCode.compareTo(zone.substring(4)) <= 0; 
} 
1

compareTo方法返回兩個字符串之間的第一個不同字符的差異。我不確定郵政編碼是否總是字母數字字母,但如果是這種情況,它應該起作用。如果不是,你可能需要一個分區來適應你的問題

基本上你應該檢查輸入字符串是否在兩個其他字符串之間。

if(minPostCode.compareTo(input) <= 0 && maxPostCode.compareTo(input) >= 0) { 
    //it is between two post codes 
} 
0

你的if語句是錯誤的。你應該這樣做:

public boolean postCodeInRange(String postCode, String zone) 
{ 
    if (zone.charAt(0)==postCode.charAt(0)) 
    { 
     if ((int) postCode.charAt(1) < (int) zone.charAt(1) || 
      (int) postCode.charAt(1) > (int) zone.charAt(5) 
      return false; 
     if (((int) postCode.charAt(1) == (int) zone.charAt(1) && 
      (int) postCode.charAt(2) < (int) zone.charAt(2)) || 
      ((int) postCode.charAt(1) == (int) zone.charAt(5) && 
      (int) postCode.charAt(2) > (int) zone.charAt(2))) 
      return false; 
     return true; 
    } 
    return false; 
} 

正如你所看到的,它很難閱讀,甚至更難編輯。一個更好的解決辦法是:

public boolean postCodeInRange(String postCode, String zone) 
{ 
    String minCode = zone.substring(0, 3); 
    String maxCode = zone.substring(4, 7); 
    return minCode.compareTo(postCode) <= 0 && postCode.compareTo(maxCode) <= 0; 
} 
相關問題