怎样解决Java中文本排序的异常(序号正常而文本乱码,文本正常则序号异常)

在练习java文本排序的示教代码时,同样的代码,老师运行时正常,我在自己的电脑上则出现序号排序异常,应该为1、2、3、4、5、6、7、8、9的顺序,变成了2、3、4、5、6、7、8、9、-1,文本文档显示正常。修改编码方式后数字的顺序变正常了(1、2、3、4、5、6、7、8、9),但文本文档变成乱码,请问应该怎样解决?

public class DemoBufferedTextSort {
        public static void main(String[] args) throws IOException {
        Map<String, String> hashMap = new HashMap<>();
        BufferedReader br = new BufferedReader(new FileReader("d:\\IdeaProjects\\i.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\IdeaProjects\\h.txt"));

        String line;

                 while ((line=br.readLine())!=null){
            String[] arr = line.split("\\.");    
            hashMap.put(arr[0],arr[1]);               
        }

        Set<String> set = hashMap.keySet();

        for(Object key:set){
            System.out.print(key);             //i.txt使用utf-8编码方式时排序为234567891    
                                                                         //i.txt使用ANSI编码方式时排序为正常的123456789,但写入的文本为乱码
        }

                 for (String key : set) {          
            String value = hashMap.get(key);
            line=key+"."+value;                    
            bw.write(line);
            bw.newLine();
        }
        bw.close();
        br.close();
    }
}

图片说明

经过仔细分析,对照网上的一些文档,找到是由于zwnbsp编码造成的,在utf-8编码时在数字1的前面加入了空白符,Hashmap在get(key)时,将空白符和数字1一起认作key了,所以在自动排序时不能和其它数字正常比较而放在了最后。但不知道要怎么解决,请高手指点!

https://blog.csdn.net/chouqiu8451/article/details/100746723

我也遇到了这个问题 我把文本编码调了 但是 排序又不对了 请问怎么解决呢