我有下一个小代码,它必须读取文件,当它找到\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 $
答案 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 字符,并且只替换"真正的换行符"组合
因此,请选择您的定义,然后实施。