当前位置: 首页 > 面试题库 >

为什么\ n和(String)System.getProperty(“ line.separator”); 采取不同的行动?

秦宁
2023-03-14
问题内容

我的程序输入一个文本文件,该文件的每个单词之间都用换行符分隔,我的程序接收该文本文件并处理数据,然后我需要输出到一个新文件,同时保持控制台输出。

现在,我想知道为什么当我将“ \
n”附加到stringBuilder时,它将在控制台中以换行的形式打印出来,但是在文件输出中却没有将其作为换行,而只是将所有单词放在一行中。

当我使用newLine时,它只会在控制台输出和输出文件中给换行。这是为什么?(String)System.getProperty(“
line.separator”)造成此问题的原因是什么?

String newLine = (String)System.getProperty("line.separator");

 try{
     BufferedReader fileIn = new BufferedReader(new FileReader(fileName));

     stringBuilder.append(newLine);
     while((s = fileIn.readLine()) != null){
        stringBuilder.append(s);
        stringBuilder.append(newLine);//using newLine, 
     }
        String a = stringBuilder.toString();

     if(s== null){
        fileIn.close();
     }

问题答案:

因为在某些系统(Linux /Unix)上定义了新行,\n而在其他系统(Windows)上则定义了\r\n。根据阅读文本的软件的不同,它可能会选择遵守此规则,或者选择“宽容”,甚至\r单独识别。

相关维基百科文字(https://en.wikipedia.org/wiki/Newline):

基于ASCII或兼容字符集的系统分别使用LF(换行,’\ n’,0x0A,十进制)或CR(回车,’\ r’,0x0D,十进制13)或CR后跟LF(CR+ LF,’\ r \ n’,0x0D0A)

这也是为什么您可以System像以前一样从类中检索系统定义的行分隔符的原因,而不是例如使它在String类中具有一定的常量。



 类似资料:
  • 问题内容: 我有一个制表符分隔的字符串(代表一个表),该字符串传递给我的方法。当我将其打印到命令行时,它看起来像是带有行的表: http://i.stack.imgur.com/2fAyq.gif 命令窗口已正确缓冲。我的想法是,在每行之前或之后肯定有换行符。 我的问题是我想将传入的字符串分成代表表行的单个字符串。到目前为止,我有: 输出: 显然,字符串中有一些内容告诉操作系统开始新的一行。但是,

  • 问题内容: java.util.Random源代码的第294行说 为什么是这样? 问题答案: 该描述并不完全准确,因为0不是2的幂。更好的说法是 当n是2的幂或2的幂的负数或零时。 如果n是2的幂,则二进制中的n是单个1,后跟零。-n为2的补数是倒数+ 1,因此位排成一行 要了解其工作原理,请将二进制补码视为逆+ 1。 因为当您添加一个得到两个的补码时,您会一直进行到一个。 如果n不是2的幂,则结

  • 问题内容: 为什么不带?为什么要带? 问题答案: 这是因为,在覆盖该方法中的接口,它不需要该对象是。 该接口指定了允许将对象写入流或基础存储的方法,但这可以通过序列化以外的其他过程来实现。该工具实现了此功能,但需要可序列化的对象。但是,它不能修改其实现的接口的签名。

  • 运行这个简单的程序时,根据编译器的不同,观察到不同的行为。 它在由GCC 11.2编译时打印,在由MSVC 19.29.30137编译时打印(两者都是截至今天的最新版本)。 相关引文(摘自最新的C 23工作草案N4901): 给定 20.15.5.4 [元一元道具], (如11.4.5.3/11[class . copy . ctor],11.4.6/9 [class.copy.assign],1

  • 我已经阅读了这个问题的答案,但是我仍然不知道它如何返回以及为什么第二行中的代码返回。