为了账号安全,请及时绑定邮箱和手机立即绑定

比较Java中具有不同字节顺序掩码的字符串

比较Java中具有不同字节顺序掩码的字符串

慕妹3146593 2021-05-10 12:21:55
在我的Java程序中,我有两个字符串,s1并且s2在打印时它们看上去都相等,但是,因为它们的编码方式不同,所以s1.equals(s2)返回false。我将如何比较这两个字符串,以便即使它们的编码方式不同,它们仍然相等?看下面的示例代码:    s1 = s1.trim();    s2 = s2.trim();    byte[] s1bytes = s1.getBytes();    byte[] s2bytes = s2.getBytes();    System.out.println(s1+","+s2+","+s1.equals(s2));    System.out.println("\ns1's bytes are:");    for (int i = 0; i < s1bytes.length; i++) {        System.out.println(s1bytes[i]);    }    System.out.println("\ns2's bytes are:");    for (int i = 0; i < s2bytes.length; i++) {        System.out.println(s2bytes[i]);    }打印:SHEOGMIOF,SHEOGMIOF,falses1's bytes are:-17-69-65837269797177737970s2's bytes are:837269797177737970正如你可以看到打印时s1和s2看起来是一样的,相比当他们不相等的两个字节数组是不同的。编辑:我的问题不同于此问题,因为我不是从文件中读取数据,.java文件中的源代码编码方式不同,而不是其他文件中的数据编码。
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

从文件中读取字符串时,请从字符串中删除字节顺序掩码(BOM)。的字符代码是"\uFEFF"


public class Foo {

    public static void main(final String[] args) {

        final byte[] b1 = {-17, -69, -65, 83, 72, 69, 79, 71, 77, 73, 79, 70};

        final byte[] b2 = {83, 72, 69, 79, 71, 77, 73, 79, 70};


        final String s1 = new String(b1).replace("\uFEFF", "");

        final String s2 = new String(b2).replace("\uFEFF", "");


        System.out.println(s1);

        System.out.println(s2);

        System.out.println(s1.equals(s2));

    }

}

印刷:


SHEOGMIOF

SHEOGMIOF

true


查看完整回答
反对 回复 2021-05-26
  • 2 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信