2014-03-12 49 views
0
String str[] = {"1000458551||A210171046D86F9F6EE21B66FE9B1441E20EC1DEF9654A2D092162591C01D26F||1||7707||0||" 
      + "0||1002||1373569142000||HTC One||val||4.1.2||0||1.01.20130206.15441^^1000458551||A210171046D86F9F6EE21B66FE9B1441E20EC1DEF9654A2D092162591C01D26F||" 
      + "1||7707||0||0||1002||1373569142000||HTC One||val||4.1.2||0||1.01.20130206.15441","1000458551||A210171046D86F9F6EE21B66FE9B1441E20EC1DEF9654A2D092162591C01D26F||1||7707||0||" 
        + "0||1002||1373569142000||HTC One||val||4.1.2||0||1.01.20130206.15441^^1000458551||A210171046D86F9F6EE21B66FE9B1441E20EC1DEF9654A2D092162591C01D26F||" 
        + "1||7707||0||0||1002||1373569142000||HTC One||val||4.1.2||0||1.01.20130206.15441"};  

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
for(String p:str){ 
     String Recordstore[] = p.split("\\^\\^"); 
     long len = Recordstore.length; 
     long counter = 0; 
     StringBuffer finalRecord = new StringBuffer(); 
     for (String rec : Recordstore) { 
      rec = rec.replaceAll("\\|\\|", "|"); 
      if (counter != len - 1) 
       finalRecord.append(rec).append(System.lineSeparator()); 
      else 
       finalRecord.append(rec); 
      counter++; 
     } 
    baos.write(finalRecord.toString().getBytes()); 
    } 
ByteArrayInputStream object = new ByteArrayInputStream(
      baos.toByteArray()); 
String pr=""; 
    for(int y = 0 ; y < 1; y++) { 
     while((c= object.read())!= -1) { 
      pr+=(char)c; 
     } 
     System.out.println(pr); 
     object.reset(); 
     } 

将字符串转换为字节并重新检查字节后,我看到新行字符丢失,字符串合并在一行中。 如何即使在转换为字节后仍能保留新的行字符?如何在转换为字节后在字符串中保留换行符?

样本输出是: 添加新行的字符串和打印字符串给出:

1000458551 | A210171046D86F9F6EE21B66FE9B1441E20EC1DEF9654A2D092162591C01D26F | 1 | 7707 | 0 | 0 | 1002 | 1373569142000 | HTC一个| VAL | 4.1.2 | 0 | 1.01.20130206.15441 1000458551 | A210171046D86F9F6EE21B66FE9B1441E20EC1DEF9654A2D092162591C01D26F | 1 | 7707 | 0 | 0 | 1002 | 1373569142000 | HTC一个| VAL | 4.1.2 | 0 | 1.01.20130206.15441

将其转换为字节,并打印该字符串后

1000458551 | A2101710 46D86F9F6EE21B66FE9B1441E20EC1DEF9654A2D092162591C01D26F | 1 | 7707 | 0 | 0 | 1002 | 1373569142000 | HTC一个| VAL | 4.1.2 | 0 | 1.01.20130206.154411000458551 | A210171046D86F9F6EE21B66FE9B1441E20EC1DEF9654A2D092162591C01D26F | 1 | 7707 | 0 | 0 | 1002 | 1373569142000 | HTC一个| VAL | 4.1。 2 | 0 | 1.01.20130206.15441

感谢提前

+0

什么换行符? –

+0

我已将System.lineSeparator()添加到最终记录。但是,在将其转换为字节并重新检查字节后,我没有看到新行。 – user3218089

+0

你的意思是System.getProperty(“line.separator”); ? –

回答

0

因为该行从未执行的答复。

finalRecord.append(rec).append(System.lineSeparator()); 

我不知道为什么你分割字符串是这样的:

String Recordstore[] = p.split("\\^\\^"); 

显然,阵列Recordstore.length()永远是1,因为没有在原始字符串的任何^^。因此counter != len - 1将始终是false

更新:

我做这一行的一些变化:

baos.write(finalRecord.append(System.lineSeparator()).toString().getBytes()); 
+0

我已经在我的问题中进行了更改,显然我添加了错误的字符串,但问题仍然存在。 – user3218089

+0

@ user3218089我给你的新字符串拍了一张照片。问题是你忘了在不同'finalRecord'之间添加newLineSeperater。 'finalRecord'内的newLineSeperater运行良好。 – Jiang

相关问题