Java 我在应用程序中有一些错误

Java 我在应用程序中有一些错误,java,Java,这是我的代码。这个程序从我正在设置的文件中搜索特定的片段 class z{ public static void main(String [] args) throws IOException{ String fileName = "file.txt"; String text = "{"; String delimiter = "}"; Optional<String> result = Files .lines

这是我的代码。这个程序从我正在设置的文件中搜索特定的片段

class z{
public static void main(String [] args) throws IOException{
String fileName = "file.txt";
String text = "{";
String delimiter = "}";
Optional<String> result =
               Files
                    .lines(Paths.get(fileName))
                    .filter(e -> e.contains(text))
                    .map(e -> {
                        int start = e.indexOf(text);
                        int end = e.indexOf(delimiter, start + text.length());
                        return e.substring(start, end);
                    })
                    .findFirst();

           result.ifPresent(System.out::println);
}
}

看起来您正在请求索引
-1
,如果我们查看以下文档:

在任何一种情况下,如果此字符串中没有出现此类字符,则返回-1


当您的搜索模式与任何内容都不匹配时,就会出现这种情况。

看起来您正在请求索引
-1
,如果我们查看文档中的以下内容:

在任何一种情况下,如果此字符串中没有出现此类字符,则返回-1


当您的搜索模式与任何内容都不匹配时,就会出现这种情况。

堆栈跟踪有以下几行:

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 位于java.lang.String.substring(String.java:1967)

所以失败的是
子字符串。这可能是因为
end
indexOf
返回了-1,这是找不到它时返回的值


过滤以确保文件包含
文本
,而不是过滤文件是否包含
分隔符

堆栈跟踪包含以下行:

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 位于java.lang.String.substring(String.java:1967)

所以失败的是
子字符串。这可能是因为
end
indexOf
返回了-1,这是找不到它时返回的值

过滤以确保文件包含
文本
,而不是过滤文件是否包含
分隔符

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1967)
    at z.lambda$main$1(z.java:27)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
    at java.util.Spliterators$IteratorSpliterator.tryAdvance(Spliterators.java:1812)
    at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
    at z.main(z.java:29)