Java字符串比较问题与空格

时间:2014-06-16 11:03:14

标签: java if-statement

我使用java调用一些Web服务,它返回一些值给我。 这些值是我成功收到的一些属性名称。我把返回的值放在数据库中。 例如,我检索的值是:

  

DSLAM端口

     

Interfejs NA ISP

因此,当我查看数据库时,这些值将作为DSLAM portInterfejs na ISP存储在数据库中。 这就是我收到它们的方式,也就是它们存储在数据库中的方式(所以这些单词之间只有一个空格)。

所以我从Web服务接收这些值,但是当我尝试在课堂上进行额外的比较时:

if ( attribute.trim().equalsIgnoreCase("Interfejs na ISP") ) {
     System.out.println("attr2");
}

if ( attribute.trim().equalsIgnoreCase("DSLAM port") ) {
     System.out.println("attr3");
}

我没有系统打印行到我的控制台,if始终是false。 可能是什么问题,我该如何解决? 这对我来说真的很奇怪。属性存储正确,只有当我尝试比较它时才会出现奇怪的行为。 if子句永远不会true。语言格式会出现问题吗?

此外,如果我尝试使用单个词:

if (attribute.trim().equalsIgnoreCase("Telefon"))
                    {   System.out.println("attr5");


                    }

然后它在System Out中写入。 所以用sinlge这个词似乎没有问题

1 个答案:

答案 0 :(得分:0)

输出attribute值后面的字节数组的序列化,以确切地查看它包含的字符。这将帮助您捕获诸如空白等内容。完成后,您可以将字符串匹配更改为实际从数据库中获取的内容,或调整持久性以生成直接值。

仅仅打印变量是不够的,相反,你必须迭代数组中的所有桶并以十六进制或十六进制输出 - 你的目标输出类似于" [44,53,4C ,..]",它们对应于" DSL .."。要将字节数组转换为十六进制表示,您可以使用此代码段,或者作为练习,自己尝试:

public static String convertToHexString(byte[] data) {
    StringBuffer buf = new StringBuffer();
    for (int i = 0; i < data.length; i++) {
        int nibble = (data[i] >>> 4) & 0x0F;
        int two_nibbles = 0;
        do {
            if ((0 <= nibble) && (nibble <= 9))
                buf.append((char) ('0' + nibble));
            else
                buf.append((char) ('a' + (nibble - 10)));

            nibble = data[i] & 0x0F;
        } while (two_nibbles++ < 1);
    }
    return buf.toString();
}

现在,当您有输出时,请使用ascii table查找字符串中包含的值,并根据字符串中实际包含的内容更改ifs。可能通过使用匹配的正则表达式。 机会是空格是一些非平凡的空白字符,如&nbsp;(十六进制:A0),但你也可能遇到编码问题。如果字符表没有帮助,请随意发布十六进制值。