我必须处理ascii结构化文件,我需要将这两个常量字节放到每一行的末尾,以便我可以尊重给我的文件结构:
private final static int ENDRECORD = 0x0d;
private final static int ENDLINE = 0x0a;
我不知道它是否是经典的“\ n”,有没有办法可以将这两个变量放在字符串的末尾? 像:
String line = line + ENDRECORD + ENDLINE; //我现在这是错的
答案 0 :(得分:2)
你很亲密。它是'\r'
和'\n'
。
System.out.println((int) '\r');
System.out.println((int) '\n');
输出:
13
10
分别是0x0d
和0x0a
。使用char
s:
private final static char ENDRECORD = '\r';
private final static char ENDLINE = '\n';
和
String line = line + ENDRECORD + ENDLINE;
此外,您可以使用StringBuilder
来提高效率,而不是连接。没有必要让它工作,但使用它来构建字符串而不是与+
串联是标准的。
答案 1 :(得分:1)
只需将常量更改为字符串:
private final static String ENDRECORD = "\r";
private final static String ENDLINE = "\n";
然后你现有的连接应该没问题。
char
也没关系:
private final static char ENDRECORD = '\r'; // Or (char) 0x0d
private final static char ENDLINE = '\n'; // Or (char) 0x0a
您应该将字符视为字符,而不是字节或整数值。它将使您的文本处理更加简单。
答案 2 :(得分:0)
您必须将数据类型更改为char
。
String myFullLine = line + (char)ENDRECORD + (char)ENDLINE;
如果您计划为多行执行此操作,我建议使用StringBuilder
。
答案 3 :(得分:0)
您希望值为字符而不是整数。
所以,你可以这样做:
private static final char ENDRECORD = (char)0x0d;
private static final char ENDLINE = (char)0x0a;
...
line = line + ENDRECORD + ENDLINE;
我假设您有多条记录,所以更好的方法是为每条记录创建一个循环并使用StringBuilder
:
StringBuilder buffer = new StringBuilder(4096);
for (final String record: records) {
buffer.setLength(0);
buffer.append(record).append(ENDRECORD).append(ENDLINE);
String line = buffer.toString();
...
}
如果你要做的就是输出记录,那么就没有必要把它放在StringBuilder
中;只需将其写入您的Stream或Writer:
OutputStream out = new FileOutputStream("records.dat");
for (final String record: records) {
out.write(record.getBytes());
out.write(ENDRECORD);
out.write(ENDLINE);
}