首页 > 解决方案 > “String.substring(int,int)行:不可用”导致错误

问题描述

不知何故,我的 if 循环使用子字符串检查 .txt 文件导致了问题。没有 if 循环,一切正常。但是有了它,文本文件中的空行似乎导致它崩溃。它一直工作到文件中的第一个空行,然后我收到此错误。我能做些什么呢?

代码:

public class S1_Blockchain extends ConsoleProgram {

    public void init() {
        setSize(400, 250);
        setFont("Arial-bold-18");

        BufferedReader br = null;
        String line;
        
        try {
            br = new BufferedReader(new FileReader("block_chain.txt"));
            while((line = br.readLine()) != null){
                if(line.substring(0,1).equals("T") || line.substring(0,1).equals("G")) {
                   System.out.println(line);
                }
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
    }
}

标签: javasubstringbufferedreader

解决方案


您可能还想检查空字符串:

if( !line.trim().isEmpty() && (line.substring(0,1).equals("T") || line.substring(0,1).equals("G"))) { ... }

然后,您可能还想重构代码以使其更具可读性:

public class S1_Blockchain extends ConsoleProgram {

    public void init() {
        setSize(400, 250);
        setFont("Arial-bold-18");

        BufferedReader br = null;
        String line;
        
        try {
            br = new BufferedReader(new FileReader("block_chain.txt"));
            while((line = br.readLine()) != null){
                if(shouldConsider(line)) {
                   System.out.println(line);
                }
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
    }
}

private boolean shouldConsider(String line){
  return !line.trim().isEmpty() 
         && 
         (line.substring(0,1).equals("T") || line.substring(0,1).equals("G"));
}

推荐阅读