如何将字符串包含到某些值java中

时间:2014-11-20 01:40:14

标签: java string

我需要限制一个3位数的字符串,第一个数字只接受0和1,第二个数字接受0到4,第三个数字接受0到3。实际上,经过多次修改和新尝试后,我有了代码:

public boolean isLocalizacaoValida(String localizacao) {
    String numero1 = localizacao.substring(0);
    int intNumero1 = Integer.parseInt(numero1);
    String numero2 = localizacao.substring(1);
    int intNumero2 = Integer.parseInt(numero2);
    String numero3 = localizacao.substring(2);
    int intNumero3 = Integer.parseInt(numero3);

    if (localizacao.length() != 3) {
        System.out.println("Localização inválida!");
        return false;
    }
    if (localizacao.length() == 3) {

        if ((intNumero1 < 0 && intNumero1 > 1) || (intNumero2 < 0 && intNumero2 > 4) || (intNumero3 < 0 && intNumero3 > 3)) {
            System.out.println("Localização inválida!");
            return false;
        } else {
            System.out.println("Localização válida!");
            return true;
        }
    }
    System.out.println("Localização inválida!");
    return false;
}

这样,即使字符串应该返回false,它也会一直返回true。

5 个答案:

答案 0 :(得分:2)

你可以使用正则表达式,

String pattern = "^[01][0-4][0-3]$";
return input.matches(pattern);

答案 1 :(得分:0)

采用单个int的substring方法通常会返回从该索引到字符串末尾的所有内容。你应该使用这样的两个参数版本:

  String numero1 = localizacao.substring(0, 1); //return only the first character
  String numero2 = localizacao.substring(1, 2); //return only the second character

等等。

其次,if语句与AND操作连接的条件。也就是说,您要检查第一个数字是否在某个范围内,第二个数字是否在某个范围内,第三个数字是否在正确的范围内。只要任何一个人在正确的范围内,你就会得到真的。

if ((intNumero1 >= 0 && intNumero1 <= 1) && (intNumero2 >= 0 && intNumero2 <= 4) && (intNumero3 >= 0 && intNumero3 <= 3)) {
        System.out.println("Localização válida!");
        return true;

    } else {
        System.out.println("Localização inválida!");
        return false;
    }

看,你写的条件永远不会成真:

 intNumero1 < 0 && intNumero1 > 1

要求值小于0且大于1?这总是错误的。

答案 2 :(得分:0)

Substring返回多个char,试试这个:

public boolean isLocalizacaoValida(String localizacao) {

    if (localizacao.length() != 3) {
        System.out.println("Localização inválida!");
        return false;
    }
    if (localizacao.length() == 3) {
        String numero1 = localizacao.substring(0,1);
        int intNumero1 = Integer.parseInt(numero1);
        String numero2 = localizacao.substring(1,2);
        int intNumero2 = Integer.parseInt(numero2);
        String numero3 = localizacao.substring(2);
        int intNumero3 = Integer.parseInt(numero3);

        if ((intNumero1 < 0 && intNumero1 > 1) || (intNumero2 < 0 && intNumero2 > 4) || (intNumero3 < 0 && intNumero3 > 3)) {
            System.out.println("Localização inválida!");
            return false;
        } else {
            System.out.println("Localização válida!");
            return true;
        }
    }
    System.out.println("Localização inválida!");
    return false;
}

答案 3 :(得分:0)

(intNumero1 < 0 && intNumero1 > 1)

不可能是对的。只有当负数大于1时才会成立。我不知道任何。

您想使用||。如果intNumero1小于0,则返回true 如果大于1,则返回。换句话说,如果它是除0或1之外的任何内容。

答案 4 :(得分:-1)

怎么样

int num = Integer.parseInt(localizacao);
return (num/100 <= 1) && (num%100/10 <= 4) && (num%10 <= 3);

如果您想处理异常,可以使用TryParse代替parseInt