我有一个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();
}
答案 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()
方法。此-1
由indexOf()
产生,找不到任何东西。
您所有的行都包含方括号吗?应该检查行中是否有括号。
while ((line = br.readLine()) != null) {
if(line.indexOf(("\\(") != -1 && line.indexOf(("\\)") != -1) {
System.out.println(line.substring(line.indexOf(("\\("), line.indexOf(("\\)")))));
}
}