Java无法正确比较两个相等的字符串

Java无法正确比较两个相等的字符串,java,Java,我很困惑,因为这不应该是一个问题,我将数据从一个文件加载到一个类列表中,然后从用户输入中检查-一个字符串。如果比较时字符串相等,则应打印从文件中提取的几个变量 public static Double[] buscarLocacion(String estado,String municipio){ Double[] coord = { 0.0, 0.0 }; for(Ubicacion i: ubicacion) { System.out.pr

我很困惑,因为这不应该是一个问题,我将数据从一个文件加载到一个类列表中,然后从用户输入中检查-一个字符串。如果比较时字符串相等,则应打印从文件中提取的几个变量

public static Double[] buscarLocacion(String estado,String municipio){

    Double[] coord = { 0.0, 0.0 };       
    for(Ubicacion i: ubicacion) {

        System.out.println("check: "+estado +" getEstado:"+ i.getEstado() + " ==: " +i.getEstado().equals(estado));

        if(i.getEstado().equals(estado)) {
            if(i.getMunicipio().equals(municipio)) {

                coord[0] = i.getLat();
                coord[1] = i.getLon();
                return coord

        //etc..
我用一个主函数创建了一个单独的类。这与预期的一样,当字符串相等时,程序将打印此内容:

found: hidalgo - tula de allende lat:20.0535516 lon: -99.3395636
然而,当我将这个类导入另一个类时,在进行比较时,我总是得到null。我打印了比较的内容,如果程序发现比较为真或假,如下所示:

System.out.println("check: "+estado +" getEstado:"+ i.getEstado() + "  equals?=: " +i.getEstado().equals(estado));
这段代码打印了这个:

check:  yucatan file:veracruz de ignacio de la llave ==: false
check:  yucatan file:yucatan ==: false //<<<- how is this possible??
check:  yucatan file:oaxaca ==: false

知道为什么会这样吗?我找不到问题。我做错了什么?

您的输入可能包含空格。例如,尤卡坦语。

问题可能在于i或标题或尾随空格。请尝试以下操作:

public static  Double[] buscarLocacion(String estado,String municipio){

    Double[] coord = { 0.0, 0.0 };

     for(Ubicacion i: ubicación){
         String iEstado = i.getEstado().trim();
         estado = estado.trim();

         System.out.println("check: "+estado +" getEstado:"+ iEstado + " ==: " +iEstado.equals(estado));


            if(iEstado.equals(estado)){
                String iMunicipio = i.getMunicipio().trim();
                municipio = municipio.trim();

                if(iMunicipio.equals(municipio)){

                coord[0] = i.getLat();
                coord[1] = i.getLon();
                 return coord

//etc..
我以前有过这种错误,虽然我不确定为什么会发生这种情况,但这应该可以修复您的代码。如果是,您可以尝试更改比较顺序:

estado.equals(i.getEstado());

并检查这种方法是否有效,不必创建其他变量。

输出显然不是来自您发布的代码。我没有任何检查:在输出中,等等,这不是代码的输出。显示实际代码和实际输出。看起来estado以空格开头,而i.getEstado不以空格开头。但是,您仍然没有向我们显示匹配的代码和输出,所以谁知道呢?从输出判断,我认为@Biffen是正确的。如果您尝试i.getEstado.trim.equalestado.trim,会发生什么?您已经编辑了输出,但仍然很明显不是从发布的代码生成的。代码显示getEstado:而输出显示file:。