我正在尝试编写一个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
等邮政编码。
答案 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;
}