Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替代'\n';对于另一个字符´;我不能正常工作_Java - Fatal编程技术网

Java 替代'\n';对于另一个字符´;我不能正常工作

Java 替代'\n';对于另一个字符´;我不能正常工作,java,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");

我有下一个小代码,它必须读取一个文件,当它找到
\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'或'\r',而不是打印一个
$
,它会打印两个
$
,我不明白为什么

它打印出如下内容:

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

当它应该是这样的时候:

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

由于某些系统(例如Windows)使用
\r\n
表示行尾,因此您有时会在显示的代码中看到这种行为。您可以通过首先替换以下各项来解决此问题:

l = l.replace("\r\n", "$").replace('\n', '$').replace('\r', '$');
由于某些系统(例如Windows)使用
\r\n
表示行尾,因此您有时会在显示的代码中看到这种行为。您可以通过首先替换以下各项来解决此问题:

l = l.replace("\r\n", "$").replace('\n', '$').replace('\r', '$');
由于某些系统(例如Windows)使用
\r\n
表示行尾,因此您有时会在显示的代码中看到这种行为。您可以通过首先替换以下各项来解决此问题:

l = l.replace("\r\n", "$").replace('\n', '$').replace('\r', '$');
由于某些系统(例如Windows)使用
\r\n
表示行尾,因此您有时会在显示的代码中看到这种行为。您可以通过首先替换以下各项来解决此问题:

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

你可以通过查看调试器中car的值来检查Keppil说了什么

你可以通过查看调试器中car的值来检查Keppil说了什么

你可以通过查看调试器中car的值来检查Keppil说了什么

你可以通过查看调试器中car的值来检查Keppil说了什么可以按照@Keppil的建议进行尝试(可能“\r\n”是系统中的换行符)。 我建议不要遍历文件中的每个字符,从而使事情更加高效和简短:

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

您可以按照@Keppil的建议进行尝试(可能“\r\n”是系统中的换行符)。 我建议不要遍历文件中的每个字符,从而使事情更加高效和简短:

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

您可以按照@Keppil的建议进行尝试(可能“\r\n”是系统中的换行符)。 我建议不要遍历文件中的每个字符,从而使事情更加高效和简短:

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

您可以按照@Keppil的建议进行尝试(可能“\r\n”是系统中的换行符)。 我建议不要遍历文件中的每个字符,从而使事情更加高效和简短:

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

问题是这项任务实际上是什么

如果要在文本中找到实际的CR和LF字符,并用美元符号替换它们,那么您就得到了正确的输出。正如其他人已经解释过的,在Windows上,每个换行符都由CRLF组成

如果是关于寻找新行,并用美元符号替换每条新行,那么你首先需要问问自己如何定义新行。如果您有一个文件,其中有一些单独的CR、一些单独的LF和一些在一起的LF,该怎么办?如果要将单个CR和LF字符替换为
$
,但也要将CRLF替换为单个
$
,可以尝试:

        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上,则只有CRLF是换行符,因此只有它们才应替换为
$
),则可以将其更改为:

        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字符的原样,并且只替换“真正的换行符”组合


因此,选择您的定义,您就有了您的实现。

问题是任务实际上是什么

如果要在文本中找到实际的CR和LF字符,并用美元符号替换它们,那么您就得到了正确的输出。正如其他人已经解释过的,在Windows上,每个换行符都由CRLF组成

如果是关于寻找新行,并用美元符号替换每条新行,那么你首先需要问问自己如何定义新行。如果您有一个文件,其中有一些单独的CR、一些单独的LF和一些在一起的LF,该怎么办?如果要将单个CR和LF字符替换为
$
,但也要将CRLF替换为单个
$
,可以尝试:

        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上,则只有CRLF是换行符,因此只有它们才应替换为
$
),则可以将其更改为:

        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字符的原样,并且只替换“真正的换行符”组合


因此,选择您的定义,您就有了您的实现。

问题是任务实际上是什么

如果要在文本中找到实际的CR和LF字符,并用美元符号替换它们,那么您就得到了正确的输出。正如其他人已经解释过的,在Windows上,每个换行符都由CRLF组成

如果是关于寻找新行,并用美元符号替换每条新行,那么你首先需要问问自己如何定义新行。如果您有一个文件,其中有一些单独的CR、一些单独的LF和一些在一起的LF,该怎么办?如果要将单个CR和LF字符替换为
$
,但也要将CRLF替换为单个
$
,可以尝试:

        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上,则只有CRLF是换行符,因此只有它们才应替换为
$
),则可以将其更改为:

        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字符的原样,并且只替换“真正的换行符”组合


因此,选择您的定义,您就有了您的实现。

问题是任务实际上是什么

如果是为了找到真正的CR和LF字符