如何查找字符串是否在给定字符串的范围内

时间:2014-02-09 00:04:59

标签: java if-statement

我正在尝试编写一个if语句,以确定给定的邮政编码(邮政编码)是否在2个给定的邮政编码范围内。

例如,我想知道如何查找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;
}

这仅适用于L4J范围内的L0A-L9Z等邮政编码。

3 个答案:

答案 0 :(得分:1)

compareTo方法返回两个字符串之间的第一个不同字符的差异。我不确定邮政编码是否总是字母数字字母,但如果是这种情况则应该有效。如果不是,您可能需要一个隔间来满足您的问题

基本上你应该检查输入字符串是否在两个其他字符串之间。

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

简单的解决方案:

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