Java输出文件无法识别\n为换行符

Java输出文件无法识别\n为换行符,java,Java,对于一个大学类的Java项目,我有一个方法将ASCII图像保存为单行字符串,另一个方法称为toString,它将重建此ASCII图像并作为字符串返回。当我在Eclipse上运行我的程序时,我的输出会在控制台上正常地和多行地显示,并且在它们应该在的地方有换行符。但是当我用命令行和重定向的输出文件运行它时 java myprogram输出 输出中的文本为单线,不带换行符 下面是该方法的代码 public String toString(){ String output = "";

对于一个大学类的Java项目,我有一个方法将ASCII图像保存为单行字符串,另一个方法称为toString,它将重建此ASCII图像并作为字符串返回。当我在Eclipse上运行我的程序时,我的输出会在控制台上正常地和多行地显示,并且在它们应该在的地方有换行符。但是当我用命令行和重定向的输出文件运行它时

java myprogram<输入>输出

输出中的文本为单线,不带换行符

下面是该方法的代码

public String toString(){

    String output = "";

    for(int i=0; i<height; i++){
        output=output+image.substring(i*width, i*width+width)+"\n";

        }
    return output;  
}
公共字符串toString(){
字符串输出=”;

对于(int i=0;i可能是
\n
不是您正在运行的操作系统的正确行分隔符。对于Java,最好使用
system.getProperty(“line.separator”)
用于创建换行符,如。

可能是
\n
不是您正在运行的操作系统的正确行分隔符。对于Java,最好使用
system.getProperty(“line.separator”);
用于创建换行符,如。

在Windows:

public String toString() {
    final String EOL = System.getProperty("line.separator");
    final int EOL_LENGTH = EOL.length();
    StringBuilder output = new StringBuilder(image.length() + EOL_LENGTH * height);
    output.append(image);
    for (int i = 0; i < height; i++) {
        output.insert(i*(width + EOL_LENGTH) + width, EOL);
    }
    return output.toString();  
}
公共字符串toString(){
最终字符串EOL=System.getProperty(“line.separator”);
最终整数下线长度=下线长度();
StringBuilder输出=新的StringBuilder(image.length()+下线长度*高度);
输出。追加(图像);
对于(int i=0;i
当Windows:

public String toString() {
    final String EOL = System.getProperty("line.separator");
    final int EOL_LENGTH = EOL.length();
    StringBuilder output = new StringBuilder(image.length() + EOL_LENGTH * height);
    output.append(image);
    for (int i = 0; i < height; i++) {
        output.insert(i*(width + EOL_LENGTH) + width, EOL);
    }
    return output.toString();  
}
公共字符串toString(){
最终字符串EOL=System.getProperty(“line.separator”);
最终整数下线长度=下线长度();
StringBuilder输出=新的StringBuilder(image.length()+下线长度*高度);
输出。追加(图像);
对于(int i=0;i
您使用的是什么文本编辑器?这会有所不同,如果您在Windows上,请尝试在记事本++中查看它,如果我使用mac texteditor进行检查,会有所不同吗?正如Chris Thompson所说,原因是在Windows上,行端由
\r\n
组成,例如,普通记事本顽固地拒绝识别Linux/Unix line end
\n
。顺便说一句,为了更好地使用内存,最好使用StringBuilder;速度要快得多!我可以使用StringBuilder来改变行数吗?因为高度(行数)将根据输入图像的不同而变化。您使用的文本编辑器是什么?这将有所不同,如果您在Windows上,请尝试在记事本++中查看它。如果我使用mac texteditor进行检查,情况会有所不同吗?正如Chris Thompson所说,原因是在Windows上,行端由
\r\n
和普通记事本(例如obsti)组成nately拒绝识别Linux/Unix line end
\n
。顺便说一句,最好使用StringBuilder以提高内存使用率;速度要快得多!我可以使用StringBuilder来改变行数吗?因为高度(行数)会随输入图像的不同而变化。您不就是
append()
?@Bohemian:是的,但是将子字符串的
高度
乘以insert不应该比insert快太多。只显示StringBuilder API。您是否只显示
append()
?@Bohemian:是的,但是将子字符串的
高度
乘以insert不应该比insert快太多。只显示StringBuilder API。