Java从文件中打印特定数据

时间:2018-07-11 10:40:57

标签: java eclipse substring reader

我有一个txt文件。在其中有规则,我必须将括号中的所有内容放在单独的文件中。但是我什至没有在控制台上显示它。

我已经尝试了很多方法,但是我总是会遇到一些错误。(代码概述)

使用现在的解决方案,它在控制台中什么也没有显示。有人知道为什么吗?

在代码末尾,方括号始终与“ InputParameters”在同一行。

概述的解决方案不起作用。也许有人有主意?

在下面的代码中,出现以下错误:

  

线程“主”中的异常java.lang.StringIndexOutOfBoundsException:   字符串索引超出范围:java.lang.String.substring处为-1(未知   来源)blabla.execute.main(execute.java:17)

此处是txt文件中的一些内容:

dialect  "mvel"   
rule "xxx"  
    when
        InputParameters (xy <= 1.124214, xyz <= 4.214214, abc <= 1.12421, khg <= 1.21421)   
    then


Ty

这是代码:

public class execute {

    public static void main(String[] args) throws IOException {
        BufferedReader br = null;


        try {
            br = new BufferedReader(new FileReader("C:..."));

            java.lang.String line;
            line = br.readLine();
            while ((line = br.readLine()) != null) {
                System.out.println(line.substring(line.indexOf(("\\("), line.indexOf(("\\)")))));

            }
        } catch (FileNotFoundException e1) {

            e1.printStackTrace();

        } finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

2 个答案:

答案 0 :(得分:0)

问题是,如果要获取其中不存在所搜索字符串的字符串的索引(indexOf()),indexOf返回-1,并且如果方法子字符串接收到参数-1,则它将抛出一个StringIndexOutOfBoundsException。我建议先检查一行是否包含“ InputParameter”,因为您说过这个词始终在同一行,然后使用subtring和indexOf方法将字符串放在方括号内。

这个对我有用

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileRead {
    public static void main(String[] args) {
        final String filename = "$insertPathToFile$"; 
        BufferedReader br = null;

        try {
            br = new BufferedReader(new FileReader(filename));
            String line = br.readLine();
            while(line != null){
               if (line.contains("InputParameters")) {
                   System.out.println(line.substring(line.indexOf("(")+1, line.indexOf(")")));
               } // end if
               line = br.readLine();
            } // end while
        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            try {
                br.close();
            } catch (IOException e) {}
        } // end try
    } // end main
} // end class

答案 1 :(得分:0)

  

线程“主”中的异常java.lang.StringIndexOutOfBoundsException:   字符串索引超出范围:java.lang.String.substring处为-1(未知   来源)blabla.execute.main(execute.java:17)

此异常意味着-1被传递给substring()方法。此-1indexOf()产生,找不到任何东西。

您所有的行都包含方括号吗?应该检查行中是否有括号。

 while ((line = br.readLine()) != null) {
        if(line.indexOf(("\\(") != -1 && line.indexOf(("\\)") != -1) {
            System.out.println(line.substring(line.indexOf(("\\("), line.indexOf(("\\)")))));
        }
    }