比较字符串时遇到问题。比方说,我有一个缓冲区,用于保存1024位的字符串。如果我用字符串“Hello”填充该缓冲区,则缓冲区将包含“Hello”+剩余的字节数。如果我创建了另一个分配了“Hello”的字符串,没有任何预先指定的缓冲区。由于这个缓冲区,两者永远不会相等。
byte[] buffer = new byte[1024];
String a = someInputStream.read(buffer); // A will contain "Hello" + rest of bytes.
String b = "Hello"; // Same string but with no buffer
System.out.println(a.equals(b)); // Would print false
有没有办法在不考虑缓冲区的情况下比较这两个字符串?
答案 0 :(得分:0)
它非常简单:java中的字符串与不以0结尾的c字符串不同。因此,从缓冲区创建的String
的长度为1024,最后的字符串为0。除此之外,inputStream.read(buffer)
将返回int
,表示实际读取了多少字节,而不是包含缓冲区的String
。
答案 1 :(得分:0)
inputStream.read(buffer)返回int而不是String。你可以比较如下。
byte[] buffer = new byte[1024];
inputStream.read(buffer); // A will contain "Hello" + rest of bytes.
String b = "Hello"; // Same string but with no buffer
System.out.println(new String(buffer).trim().equals(b));