我的(字符串).split(" =");不工作?

时间:2015-10-28 20:58:58

标签: java file hashmap

我想把一个字符串变成一个String [],但它并不工作我想要它的工作方式!我的代码:

    public static void get(HashMap<String, String> saves, File file) throws UnsupportedEncodingException, FileNotFoundException, IOException{
    if (!file.exists()){
        return;
    }
    InputStreamReader reader;
    reader = new InputStreamReader(new FileInputStream(file), "UTF-16");
    String r = null;
    String[] s;
    BufferedReader bufreader = new BufferedReader(reader);
    while((r=bufreader.readLine()) != null){
        s = r.split("=");
        if (s.length < 2){
            System.out.println(s.length);
            System.out.println(s[0]);
            return;
        }
        saves.put(s[0].toString(), s[1].toString());
        s = null;
    }
}

当我告诉它将String打印到控制台

System.out.println(s.length);
System.out.println(s[0]);

它只是打印:

1
??????????????????
 - 
 - 

应该阅读的内容(文件中包含的内容):

1=welcome
2=hello
3=bye
4=goodbye

所以我希望它将值放入hashmap:

saves.put("1", "welcome");
saves.put("2", "hello");
saves.put("3", "bye");
saves.put("4", "goodbye");

但是 s = e.split(&#34; =&#34;)没有拆分它使字符串变为&#34; ?????????? &#34; 谢谢!

1 个答案:

答案 0 :(得分:4)

您似乎正在使用错误的编码。 您的输入文件实际上不是UTF-16,因为Java代码需要它。

我将您的示例数据保存在一个文件中,结果同样被破坏了。

我系统上的默认编码是UTF-8,因此我使用以下命令更改了文件的编码:

iconv -f utf-8 -t utf-16 orig.txt > converted.txt

converted.txt上使用您的程序时, 它产生预期的输出。

如果我使用orig.txt,它也会产生预期的输出, 并在程序中进行这个简单的更改:

reader = new InputStreamReader(new FileInputStream(file), "UTF-8");

您可以确保文件是UTF-16编码的, 如果没有,转换它, 或者在创建InputStreamReader时使用正确的编码。