从文件中读取字符串时,String.split不会以\ n分割

时间:2016-07-18 20:23:13

标签: java string

这是在Windows上。当我在类中创建的字符串中使用\ n时它起作用,但是当从文件中读取相同的字符串时它没有。

String[] string = str.split(" \\n| |\\n|\n");

文件中的字符串示例:

  

这是一个测试。\ n颜色:[蓝黄黑绿红] \ n日期:

如果我用来从文件中读取的代码具有任何相关性:

public static String getStringArray(String filename) {
        try {
            return IOUtils.toString(new FileInputStream(filename), Charset.defaultCharset());
        } catch(IOException ex) {
            Logger.getLogger(File.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

这是使用org.apache.commons.io.IOUtils。

2 个答案:

答案 0 :(得分:1)

首先,名为String的方法应该返回public static String[] getStringArray(String filename) { try { String content = IOUtils.toString(new FileInputStream(filename), Charset.defaultCharset()); String[] lines = content.split("(\\\\n|\\r?\\n)"); return lines; } catch (IOException ex) { Logger.getLogger(File.class.getName()).log(Level.SEVERE, null, ex); } return null; } ,而不是public static String[] getStringArray(String filename) { try { return IOUtils.toString(new FileInputStream(filename), Charset.defaultCharset()).split("(\\\\n|\\r?\\n)"); } catch (IOException ex) { Logger.getLogger(File.class.getName()).log(Level.SEVERE, null, ex); } return null; }

此外,正则表达式“(\\ n | \ r?\ n)”符合您的预期(根据我的理解)。

它通过文字“\ n”或换行符来打破这些行。

onCreate()

或者,以简化的方式:

onCreateView()

如果迭代返回的数组(使用示例字符串),您将得到:

  

这是一个测试。

     

颜色:[蓝黄黑绿红]

     

日期:

答案 1 :(得分:0)

使用“行结束”表达式\R(在Java 8中引入)。

似乎你想要分隔空格或行结尾,即:

str.split("[ \R]+")