我使用java调用一些Web服务,它返回一些值给我。 这些值是我成功收到的一些属性名称。我把返回的值放在数据库中。 例如,我检索的值是:
DSLAM端口
Interfejs NA ISP
因此,当我查看数据库时,这些值将作为DSLAM port
和Interfejs 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这个词似乎没有问题
答案 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。可能通过使用匹配的正则表达式。
机会是空格是一些非平凡的空白字符,如
(十六进制:A0),但你也可能遇到编码问题。如果字符表没有帮助,请随意发布十六进制值。