1

我必须处理 ascii 结构化文件,我需要将这两个常量字节放在每一行的末尾,以便我可以尊重给我的文件结构:

private final static int ENDRECORD = 0x0d;
private final static int ENDLINE = 0x0a;

不知道是不是经典的“\n”,有没有办法把这两个变量放在字符串的末尾?喜欢:

字符串行 = 行 + ENDRECORD + ENDLINE;//我现在这是错的

4

4 回答 4

2

你很近。是'\r''\n'

System.out.println((int) '\r');
System.out.println((int) '\n');

输出:

13
10

分别是0x0d0x0a。使用chars:

private final static char ENDRECORD = '\r';
private final static char ENDLINE = '\n';

String line = line + ENDRECORD + ENDLINE;

此外,您可以使用StringBuilder效率而不是串联。没有必要让它工作,但使用它来构建字符串而不是与+.

于 2013-09-23T16:56:06.270 回答
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

您应该将字符视为字符,而不是字节或整数值。它将使您的文本处理更加简单。

于 2013-09-23T16:56:05.280 回答
0

您必须将数据类型更改为char.

String myFullLine = line + (char)ENDRECORD + (char)ENDLINE;

如果您打算为多条线路执行此操作,我建议使用StringBuilder.

于 2013-09-23T16:54:26.683 回答
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);
}
于 2013-09-23T17:04:04.337 回答