在java中将字节附加到字符串

时间:2013-09-23 16:50:18

标签: java string append

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

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

我不知道它是否是经典的“\ n”,有没有办法可以将这两个变量放在字符串的末尾? 像:

  

String line = line + ENDRECORD + ENDLINE; //我现在这是错的

4 个答案:

答案 0 :(得分:2)

你很亲密。它是'\r''\n'

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

输出:

13
10

分别是0x0d0x0a。使用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);
}