Java - 读取文本文件

时间:2016-04-16 19:48:25

标签: java regex text-files bufferedreader

我有一个文本文件如下:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(requestCode == REQUEST_CODE_1){
            // so , do action for button 1 click back.
        }
    }

现在,如何在" Amount"的下一行中提取数据。 我已经尝试使用boolean,检查上面和下面的行。

还有其他办法吗?

我的代码:

Past Dues / Refunds / Subsidy
Arrears / Refunds
Amount
2013.23
Period to which
it  relates
Since OCT-15

请帮助。感谢

3 个答案:

答案 0 :(得分:2)

你的方法非常好。通过设置布尔值,然后在循环的相同迭代中使用,你犯了一个小错误。

如果你这样做,你应该没事:

String amount = "No amount found";
boolean isGroup=false;
while(line = br.readline() != null) {
    // Check all your conditions to see if this is the line you care about
    if(isGroup){
      amount = line;
      isGroup = false; // so you only capture this once
      continue;
    }
    else if (isOtherCondition) {
      // handle other condition;
      isOtherCondition = false; // so you only capture this once
      continue;
    }

    // Check the contents of lines to see if it's one you want to read next iteration
    if(line.equals("Amount"){
      isGroup=true;
    }
    else if (line.equals("Some Other Condition")) {
      isOtherCondition = true;
    }
 }

这就是你所需要的。 break;只是让你不必担心获取金额后会发生什么。

答案 1 :(得分:1)

如果文件是平均大小,则可以使用正则表达式 只需将整个文件读入字符串即可 使用正则表达式会是这样的。
结果在捕获组1中。

"(?mi)^\\s*Amount\\s+^\\s*(\\d+(?:\\.\\d*)?|\\.\\d+)\\s*$"

 (?mi)                     # Multi-line mode, case insensitive
 ^                         # Beginning of line
 \s* Amount \s+ 
 ^                         # Beginning of line 
 \s* 
 (                         # (1 start), Numeric value
      \d+ 
      (?: \. \d* )?
   |  \. \d+ 
 )                         # (1 end)
 \s* 
 $                         # End of line

答案 2 :(得分:1)

这就是你在java中做@sln回答的方法

String text = "Past Dues / Refunds / Subsidy\n" +
"Arrears / Refunds\n" +
"Amount\n" +
"2013.23\n" +
"Period to which\n" +
"it  relates\n" +
"Since OCT-15";

Pattern pattern = Pattern.compile("(?mi)^Amount\\s(?<amount>\\d+\\.\\d{2})");
Matcher matcher =  pattern.matcher(text);

if(matcher.find()){
  String amount = matcher.group("amount");
  System.out.println("amount: "+ amount);
}