为什么我的新字符串前面有空?
Why is there null in front of my fresh String?
我有以下函数,输入只是一个简单的字符串。
public X509CertificateHandler getCertByFingerprint(String thumbPrint) {
if (_thumbprintMap.containsKey(thumbPrint)) {
return _thumbprintMap.get(thumbPrint);
}
}
所以在我的测试用例中,我只是硬编码值只是为了测试它,但是我需要它们是大写的,所以我把它扔到 Apache Common 中,简单吧?
certs.getCertByFingerprint(StringUtils.upperCase("eb55b661dd9133bc564aa259bcd0c598ce02892f"));
现在有趣的是,一旦我进入我的函数,传递给函数的字符串值与我预期的不同!
出于某种原因,变量的开头似乎有一个 null
!把它放在我的表情表中,我得到以下信息:
如您所见,字符串前面多了一个[,
字符...这就是我无法从我的数组中找到我要查找的内容的原因!但是为什么?
为了确保我没有发疯,我 运行 以下内容:
String fingerprint = "eb55b661dd9133bc564aa259bcd0c598ce02892f";
String f2 = StringUtils.upperCase(fingerprint);
f2.equals(fingerprint);
因为我初始化了字符串,所以我无法在它前面得到一个 null
..但是,上面的代码仍然在我新鲜的前面给了我 [,
字符串... wtf?
您的字符串开头有一个不可见字符 LEFT-TO-RIGHT MARK。尝试 运行 这一行:
System.out.println(
"eb55b661dd9133bc564aa259bcd0c598ce02892f".length() <
"eb55b661dd9133bc564aa259bcd0c598ce02892f".length()
);
输出:
true
它们看起来相同,但第二个有你的隐藏角色。抓住第一个字符串,你应该很好。
首先让我简单谈谈您对 null
值的第一个假设。当您查看 String
的实现时,您会看到 String
使用 char[]
作为后备存储。在 Java 中,不可能将 null
值存储在原始数组中。
然而,在这行代码中"
和e
之间有一个不可见的字符:
String fingerprint = "eb55b661dd9133bc564aa259bcd0c598ce02892f";
String fingerprintFixed = "eb55b661dd9133bc564aa259bcd0c598ce02892f";
如图所示,这些String
有不同的长度。
只需将光标置于 "
和 e
之间,按删除键即可开始(或从上面复制 fingerprintFixed
)。
我有以下函数,输入只是一个简单的字符串。
public X509CertificateHandler getCertByFingerprint(String thumbPrint) {
if (_thumbprintMap.containsKey(thumbPrint)) {
return _thumbprintMap.get(thumbPrint);
}
}
所以在我的测试用例中,我只是硬编码值只是为了测试它,但是我需要它们是大写的,所以我把它扔到 Apache Common 中,简单吧?
certs.getCertByFingerprint(StringUtils.upperCase("eb55b661dd9133bc564aa259bcd0c598ce02892f"));
现在有趣的是,一旦我进入我的函数,传递给函数的字符串值与我预期的不同!
出于某种原因,变量的开头似乎有一个 null
!把它放在我的表情表中,我得到以下信息:
如您所见,字符串前面多了一个[,
字符...这就是我无法从我的数组中找到我要查找的内容的原因!但是为什么?
为了确保我没有发疯,我 运行 以下内容:
String fingerprint = "eb55b661dd9133bc564aa259bcd0c598ce02892f";
String f2 = StringUtils.upperCase(fingerprint);
f2.equals(fingerprint);
因为我初始化了字符串,所以我无法在它前面得到一个 null
..但是,上面的代码仍然在我新鲜的前面给了我 [,
字符串... wtf?
您的字符串开头有一个不可见字符 LEFT-TO-RIGHT MARK。尝试 运行 这一行:
System.out.println(
"eb55b661dd9133bc564aa259bcd0c598ce02892f".length() <
"eb55b661dd9133bc564aa259bcd0c598ce02892f".length()
);
输出:
true
它们看起来相同,但第二个有你的隐藏角色。抓住第一个字符串,你应该很好。
首先让我简单谈谈您对 null
值的第一个假设。当您查看 String
的实现时,您会看到 String
使用 char[]
作为后备存储。在 Java 中,不可能将 null
值存储在原始数组中。
然而,在这行代码中"
和e
之间有一个不可见的字符:
String fingerprint = "eb55b661dd9133bc564aa259bcd0c598ce02892f";
String fingerprintFixed = "eb55b661dd9133bc564aa259bcd0c598ce02892f";
如图所示String
有不同的长度。
只需将光标置于 "
和 e
之间,按删除键即可开始(或从上面复制 fingerprintFixed
)。