将'\ n'替换为另一个字符无法正常工作

时间:2014-11-09 21:34:11

标签: java

我有下一个小代码,它必须读取文件,当它找到\n\r时,它会用$替换它。该文件是这样的:

for A27y= + 1643.2 - 642 : b
end

F017 = 3.5

这是代码:

public static void main(String[] args){
        int car;
        String l = "";
        try
        {
            File file = new File("openFile.txt");           
            RandomAccessFile af = new RandomAccessFile(file,"r");           
            while((car = af.read()) != -1)
               l += (char)car;
            l = l.replace('\n', '$').replace('\r', '$');
            System.out.println(""+l);
            af.close();
        }
        catch(IOException ex)
        {
            System.out.println("Cannot open file");
        }
    }

我遇到的问题是,每次在文件中找到'\ n'或'\ _ \',而不是打印单个$时,它会将其打印成双$$,并且我不明白为什么。

它打印的内容如下:

  

for A27y = + 1643.2 - 642:b $$ end $$$$ F017 = 3.5 $$

应该是这样的:

  

表示A27y = + 1643.2 - 642:b $ end $$ F017 = 3.5 $

4 个答案:

答案 0 :(得分:3)

由于某些系统(例如Windows)使用\r\n来表示行尾,因此有时会为您显示的代码获取此行为。你可以先修改一下来解决这个问题:

l = l.replace("\r\n", "$").replace('\n', '$').replace('\r', '$');

答案 1 :(得分:0)

您可以通过查看调试器中的汽车值来查看Keppil所说的内容

答案 2 :(得分:0)

您可以尝试@Keppil建议(可能" \ r \ n"是您系统的换行符)。 我建议不要遍历文件中的每个字符,以提高效率和缩短时间:

String text = readFileAsString("textfile.txt").replace("\n", "$").replace("\r", "");

答案 3 :(得分:0)

问题是这个任务究竟是什么。

如果它是关于在文本中找到实际的 CR LF 字符并用美元符号替换每个字符,那么您将获得正确的输出。正如其他人已经解释的那样 - 在Windows上,每个换行符都由 CR LF 组成。

如果要查找换行符,并用美元符号替换每个换行符,那么首先需要问问自己如何定义换行符。如果你有一个文件里有一些单独的 CR ,一些单独的 LF 和一些在一起怎么办?如果您希望将单个 CR LF 字符替换为$,还要将 CR LF 替换为替换为单个$,您可以尝试:

        char lastChar = `\0`;
        while((car = af.read()) != -1) {
           char currChar = (char)car;
           if ( currChar == `\n` && lastChar != `\r` || currChar == `\r` ) {
              l += '$';
           } else {
              l += currChar;
           }
           lastChar = currChar;
        }

但是,如果您只想替换Windows认为的换行符(即,如果该文件在Windows上,则只有 CR LF 是新行,所以只有它们应替换为$),然后您可以将其更改为:

        char lastChar = `\0`;
        while((car = af.read()) != -1) {
           char currChar = (char)car;
           if ( currChar == `\n` && lastChar == `\r` ) {
              l += '$'
           } else {
              l += currChar;
           }
           lastChar = currChar;
        }

这将保持单个 CR LF 字符,并且只替换"真正的换行符"组合

因此,请选择您的定义,然后实施。