inputStream String与字符串文字不同

时间:2014-11-02 03:19:44

标签: java string inputstream

尝试将inputStream String与另一个String进行比较后,无论我做什么(.equals,.compareTo),它们都不相等,即使它们是。

String readString = "READ";
System.out.println(method + " =? " + readString);
if (method.trim().equalsIgnoreCase(readString)) {
    System.out.println("Is READ");
} else {
    System.out.println("Is not READ");
}

打印出来,

READ =? READ
Is not READ

即使方法变量肯定是READ。

然后我给一位遇到同样问题的朋友发了消息,他说这是因为我解析了方法变量的inputStream。

BufferedReader inFromClient = new BufferedReader(
    new InputStreamReader(
        connectionSocket.getInputStream()
    ,   "UTF8"
    )
);
StringBuilder arrInput = new StringBuilder();
char[] cbuf = new char[DEFAULT_BUFFER_SIZE];
int bytesRead;

// Build client's input and parse it
while (true) {
    bytesRead = inFromClient.read(cbuf);

    arrInput.append(cbuf);
    ...
    // lots of parsing below and then a break
}

我已经尝试过我朋友的解决方案:String created from inputStream is not equal to its string literal

但我最终只得到了我正在阅读的部分输入,不像他那样。

1 个答案:

答案 0 :(得分:4)

  

即使方法变量肯定是READ。

实际上,绝对不是 "READ"。如果是,那么你会得到不同的输出。电脑没错。这里真正的问题是你有一些不明白的事情。

(那里有一个教训......你明智地学习。)

您所看到的内容有两种可能的解释:

  • 您要比较的其中一个字符串中有“隐形”(又名“非打印”)字符。通过调用trim(),您将删除前导和尾随空格,但还有其他不可见的字符trim()未删除(例如ASCII NUL字符)。

  • 有些字符看起来像其他字符......但不是。谷歌搜索词“homoglyphs”。


确实,查看将字符放入StringBuffer的代码(可能会给你正在测试的String ...),很明显问题是第一。您正在从整个字符数组创建一个字符串...而不是从您读取字符的数组部分。这一行不正确:

arrInput.append(cbuf);

'因为你忽略了实际读取的字符数。