admin管理员组

文章数量:1037775

写代码时,手敲是工程延期的万恶之源,不信你看这个

如果result变量的值是下面这个时,

代码语言:javascript代码运行次数:0运行复制
"## 暂无标准配置型号,请与SMC联系!\n" +        "\n" +        "竞争对手型号:"

上面划线部分的代码,返回是true还是false?

先说答案:false。

这个知识点很小,讲明白了也很简单,这次咱们把重点放在排查问题的思路上。

复现

代码语言:javascript代码运行次数:0运行复制
@Test
public void testStrContains() {
    String resultMsg = "## 暂无标准配置型号,请与SMC联系!\n" +
            "\n" +
            "竞争对手型号:";
    String checkFlag = "暂无标准配置型号,请与SMC联系!";

    assertThat("期望是true", resultMsg.contains(checkFlag));
}

感觉“!”可能是个特殊字符,去掉试试!!

去掉后,就返回true了

问题出哪了?

可能出现了特殊字符。

这种特殊字符,肉眼不好识别,最好的办法,还是看字符的编码。

话说,计算机上处理的任何字符都要经过编码/解码吧! 从编码的角度分析一下 要实现从 char 到 Byte的相互转换则必须编码 字符是怎么编码的? 编码(Encoding):信息从一种形式或格式转换为另一种形式或格式的过程。 计算机基础篇 | 一看就懂的字符集、ASCII、GBK、UTF-8、Unicode、乱码、字符编码问题 唐成,公众号:的数字化之路淘宝API返回的空格trim()不掉,好着急好生气

怎么查?

打个断点,来看看“!”的Unicode编码

直接看,都是数字!一下子也搞不清那个数字是哪个字符的编码。

咋办?

可以使用String类的这个API:

代码语言:javascript代码运行次数:0运行复制
/** * Converts this string to a new character array. * * @return  a newly allocated character array whose length is the length *          of this string and whose contents are initialized to contain *          the character sequence represented by this string. */
public char[] toCharArray() {

入参中的“!”编码是 65281

校验标识中的“!”编码是 33

从字符的角度看,“!”【65281】和“!”[33]是两个不同字符,那么在使用contains方法进行比较时,必然不匹配,然后返回false了。

案破了!

复盘

当时写代码时,代码中的

代码语言:javascript代码运行次数:0运行复制
"暂无标准配置型号,请与SMC联系!"

是从哪来的,已经不记得了。很可以是手工敲上去的。

因为,后来从日志中copy来的字符串,看也是全角的。

.java

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-16,如有侵权请联系 cloudcommunity@tencent 删除变量编码计算机字符编码字符串

写代码时,手敲是工程延期的万恶之源,不信你看这个

如果result变量的值是下面这个时,

代码语言:javascript代码运行次数:0运行复制
"## 暂无标准配置型号,请与SMC联系!\n" +        "\n" +        "竞争对手型号:"

上面划线部分的代码,返回是true还是false?

先说答案:false。

这个知识点很小,讲明白了也很简单,这次咱们把重点放在排查问题的思路上。

复现

代码语言:javascript代码运行次数:0运行复制
@Test
public void testStrContains() {
    String resultMsg = "## 暂无标准配置型号,请与SMC联系!\n" +
            "\n" +
            "竞争对手型号:";
    String checkFlag = "暂无标准配置型号,请与SMC联系!";

    assertThat("期望是true", resultMsg.contains(checkFlag));
}

感觉“!”可能是个特殊字符,去掉试试!!

去掉后,就返回true了

问题出哪了?

可能出现了特殊字符。

这种特殊字符,肉眼不好识别,最好的办法,还是看字符的编码。

话说,计算机上处理的任何字符都要经过编码/解码吧! 从编码的角度分析一下 要实现从 char 到 Byte的相互转换则必须编码 字符是怎么编码的? 编码(Encoding):信息从一种形式或格式转换为另一种形式或格式的过程。 计算机基础篇 | 一看就懂的字符集、ASCII、GBK、UTF-8、Unicode、乱码、字符编码问题 唐成,公众号:的数字化之路淘宝API返回的空格trim()不掉,好着急好生气

怎么查?

打个断点,来看看“!”的Unicode编码

直接看,都是数字!一下子也搞不清那个数字是哪个字符的编码。

咋办?

可以使用String类的这个API:

代码语言:javascript代码运行次数:0运行复制
/** * Converts this string to a new character array. * * @return  a newly allocated character array whose length is the length *          of this string and whose contents are initialized to contain *          the character sequence represented by this string. */
public char[] toCharArray() {

入参中的“!”编码是 65281

校验标识中的“!”编码是 33

从字符的角度看,“!”【65281】和“!”[33]是两个不同字符,那么在使用contains方法进行比较时,必然不匹配,然后返回false了。

案破了!

复盘

当时写代码时,代码中的

代码语言:javascript代码运行次数:0运行复制
"暂无标准配置型号,请与SMC联系!"

是从哪来的,已经不记得了。很可以是手工敲上去的。

因为,后来从日志中copy来的字符串,看也是全角的。

.java

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-16,如有侵权请联系 cloudcommunity@tencent 删除变量编码计算机字符编码字符串

本文标签: 写代码时,手敲是工程延期的万恶之源,不信你看这个