Java格式化双字符串输出文件的字符串

时间:2014-08-20 15:40:20

标签: java string double

我的代码使用BufferedReader来读取文本文件中的数据列。文本文件如下所示:

年份..... H2OIN .... CO2IN
0.000 ...... 0.0 .......... 0.0
1.000 ...... 2.0 .......... 6.0
2.000 ...... 3.0 .......... 7.0
3.000 ...... 4.0 .......... 8.0

我的格式代码如下:

try {
  FileInputStream file = new FileInputStream(inputFile);
  BufferedReader in = new BufferedReader(new InputStreamReader(file));

  f = new Formatter("M:\\TESTPACK\\AL6000803OUT.TXT"); 

  while((line = in.readLine()) != null) {
    if (line.startsWith("    0.000"))
      break;
  }

  while((line = in.readLine()) != null) {
    stream = line.split(parse);
    start = line.substring(6,9);

    if (start.equals("000")) {
      H2OIN = Double.parseDouble(stream[1]);
      CO2IN = Double.parseDouble(stream[2]);

      f.format("%s ", H2OIN);
      f.format("%s ", CO2IN);
    }
  } 
}catch (FileNotFoundException e) {
}catch (IOException e) {
}

f.close();  

但是,我的输出文件如下所示:

2.0 6.0 3.0 7.0 4.0 8.0

虽然我希望它看起来像:

2.0 3.0 4.0
6.0 7.0 8.0

我需要一个关于如何将格式应用于数据字符串而不是数据本身的建议。基本上我需要将数据列转换为数据行。建议的重复帖子不是我试图解决的问题。

2 个答案:

答案 0 :(得分:0)

我建议您在不同的List中收集每行所需的所有值。

相反,您的while循环看起来像:

List<String> h2oValues = new ArrayList<String>();
List<String> c02Values = new ArrayList<String>();
while((line = in.readLine()) != null) {
  stream = line.split(parse);
  start = line.substring(6,9);

  if (start.equals("000")) {
    H2OIN = Double.parseDouble(stream[1]);
    CO2IN = Double.parseDouble(stream[2]);

    h2oValues.add(H2OIN);
    c02Values.add(CO2IN);
  }
}

之后,循环h2oValues的值以将它们写在一行中并对c02Values执行相同的操作

for (String value : h2oValues) {
  f.format("%s ", value);
}
// Add a end of line character... using the system one, you might want to change that
f.format(%n);
for (String value : h2oValues) {
  f.format("%s ", c02Values);
}

对于结束行,如果要更改,请参阅this question

答案 1 :(得分:0)

您需要包含两个StringBuffer。一个用于你的H2OIN行,另一个用于你的CO2IN行。

像这样:

与您的其他声明......

StringBuffer H2OINRow = new StringBuffer();
StringBuffer CO2INRow = new StringBuffer();

if (start.equals("000"))区块中......

// in place of the f.format calls
H2OINRow.Append(H2OIN + " ");
CO2INRow.Append(CO2IN + " ");

在你的while循环之后......

f.format("%s\n", H2OINRow);
f.format("%s\n", CO2INRow);