java中的子字符串索引越界

java中的子字符串索引越界,java,process,substring,tasklist,stringindexoutofbounds,Java,Process,Substring,Tasklist,Stringindexoutofbounds,我正在编写一个简单的代码,使用java中的任务列表仅显示控制台类型的进程的名称 我无法执行此操作,因为此代码中存在字符串索引越界错误。 我使用索引36到43,因为在这些索引中,我在代码输出期间获得了进程类型,我们使用tasklist打印所有进程。进程名称的0到30也是如此 请帮我解决这个问题。 import java.io.*; public class process_name { public static void main(String []args) {

我正在编写一个简单的代码,使用java中的任务列表仅显示控制台类型的进程的名称

我无法执行此操作,因为此代码中存在字符串索引越界错误。 我使用索引36到43,因为在这些索引中,我在代码输出期间获得了进程类型,我们使用tasklist打印所有进程。进程名称的0到30也是如此

请帮我解决这个问题。

import java.io.*;
 public class process_name
  {
    public static void main(String []args)
     {
        try {
             int i;
              String line,pn,pt;
              pn="";
              Process p = Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe");

              BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

            while ((line = input.readLine()) != null)
            {
              pt=line.substring(36,43);
              if(pt.equals("Console")) 
              {
                 pn=line.substring(0,30);
                 System.out.println(pn);
              }
              System.out.println();
             }
        input.close();
       }
     catch (Exception err) 
     {
       err.printStackTrace();
     }
}

}尝试检查该行的长度。它可能不够长,这会导致越界错误,因为它不够长

 System.out.println(line.length());
或者你可以在打电话之前检查一下线路的长度

 if (line.length() >= 43){
 ....

据我所见,任务列表在开始时打印一个空行。如果(!line.contains(“Console”))继续,则可以轻松检查
在while循环的开头。这样,您将跳过不包含字符串控制台的每一行。

为了避免索引超出范围,我应该首先检查当前行是否包含单词“控制台”,并检查长度:

import java.io.*;
公共班机
{
公共静态void main(字符串[]args)
{
试一试{
int i;
弦线,pn,pt;
pn=“”;
进程p=Runtime.getRuntime().exec(System.getenv(“windir”)+“\\system32\\”+“tasklist.exe”);
BufferedReader输入=新的BufferedReader(新的InputStreamReader(p.getInputStream());
而((line=input.readLine())!=null)
{
if(行包含(“控制台”))
{
如果(line.length()>30){
pn=line.substring(0,30);System.out.println(pn);}
}
System.out.println();
}
input.close();
}
捕获(异常错误)
{
err.printStackTrace();
}
}}

您可以在编辑器控制台中打印该行并查看该行是否符合预期,以及您正在阅读的文件中是否有空行,您是否进行了交叉检查?您可以使用正则表达式,似乎您的行不太长,打印它,您会发现任务列表输出的第一行是空的,只需跳过第一行或检查该行是否为空