我必须处理 ascii 结构化文件,我需要将这两个常量字节放在每一行的末尾,以便我可以尊重给我的文件结构:
private final static int ENDRECORD = 0x0d;
private final static int ENDLINE = 0x0a;
不知道是不是经典的“\n”,有没有办法把这两个变量放在字符串的末尾?喜欢:
字符串行 = 行 + ENDRECORD + ENDLINE;//我现在这是错的
你很近。是'\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
效率而不是串联。没有必要让它工作,但使用它来构建字符串而不是与+
.
只需将常量更改为字符串即可:
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
您应该将字符视为字符,而不是字节或整数值。它将使您的文本处理更加简单。
您必须将数据类型更改为char
.
String myFullLine = line + (char)ENDRECORD + (char)ENDLINE;
如果您打算为多条线路执行此操作,我建议使用StringBuilder
.
您将希望这些值是字符而不是整数。
所以,你可以这样做:
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);
}