带有空格的Java字符串比较问题

带有空格的Java字符串比较问题,java,if-statement,Java,If Statement,我使用java调用某个web服务,该服务向我返回一些值。 这些值是我成功接收到的一些属性名称。我将返回的值放入数据库中。 例如,我检索到的值是: DSLAM端口 国际互联网服务提供商 因此,当我查看数据库时,这些值作为DSLAM端口和Interfejs na ISP存储在DB中。 这就是我接收它们的方式,这就是它们存储在DB中的方式,因此单词之间只有一个空格 因此,我从web服务接收这些值,但当我尝试在类中进行其他比较时: if ( attribute.trim().equalsIgnoreCa

我使用java调用某个web服务,该服务向我返回一些值。 这些值是我成功接收到的一些属性名称。我将返回的值放入数据库中。 例如,我检索到的值是:

DSLAM端口

国际互联网服务提供商

因此,当我查看数据库时,这些值作为DSLAM端口和Interfejs na ISP存储在DB中。 这就是我接收它们的方式,这就是它们存储在DB中的方式,因此单词之间只有一个空格

因此,我从web服务接收这些值,但当我尝试在类中进行其他比较时:

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

如果始终为false,则系统不会将行打印到控制台。 问题可能是什么?我如何解决? 这对我来说真是一种奇怪的行为。属性被正确地存储,只有当我尝试比较它时,我才会得到奇怪的行为。if子句从来都不是真的。语言格式会有问题吗

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

if (attribute.trim().equalsIgnoreCase("Telefon"))
                    {   System.out.println("attr5");
                        
                        
                    }
然后它将输入系统输出。
因此,使用sinlge word似乎没有问题

在属性值后面输出字节数组的序列化,以查看它到底包含哪些字符。这将帮助您捕获诸如nbsp for whitespace等内容。完成后,您可以将字符串匹配更改为实际从数据库返回的内容,或者调整持久性以生成直接的值

仅仅打印变量是不够的,相反,您必须迭代数组中的所有bucket并以十六进制或十进制输出它们-您的目标输出类似于[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();
}
现在,当您有了该输出后,请查看字符串中包含哪些值,并根据字符串中实际包含的内容更改ifs。可能通过使用匹配的正则表达式。
空格很可能是一些非平凡的空白字符,如Hex:A0,但也可能是编码问题。如果字符表没有帮助,请随意发布十六进制值。

或Print attribute来检查您得到的值。.调试程序并检查值System.out.printlnatribute的结果是什么?为了进行更深入的分析,请告诉我们System.out.printlnArrays.toStringattribute.getBytesUTF-8的结果。它可能是一个硬的、不间断的空间U+00A0吗?if attribute.matches?i\\s*Interfejs[\\s\\u00a0]na[\\s\u00a0]ISP\\s*{有时用于HTML文本中以防止换行。在属性值后面输出字节数组的序列化,以查看其确切包含的字符。这还将帮助您捕获诸如nbsp等内容。
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();
}