使用缓冲区比较字符串

Comparing Strings using a buffer

我在比较字符串时遇到问题。比方说,我有一个包含 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

有没有什么方法可以在不考虑缓冲区的情况下比较这两个字符串?

非常简单:java 中的字符串与不以 0 结尾的 c 字符串不同。因此从缓冲区创建的 String 的长度为 1024,末尾有很多 0 .除此之外 inputStream.read(buffer) 将 return 一个 int 指示实际读取了多少字节,而不是 String 包含缓冲区。

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));