java 中的子字符串索引越界
Substring index out of bounds in java
我正在编写一个简单的代码,它仅显示 "console" 类型的进程的 name 使用 任务列表 java.
由于此代码中的字符串索引越界错误,我无法这样做。
我使用索引 36 到 43,因为在这些代码中,我在代码输出期间获得了进程类型,我们使用任务列表打印所有进程。进程名称的 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){
....
据我所见,tasklist 在开头打印了一个空行。一个简单的检查是 while 循环开始时的 if (!line.contains("Console")) continue;
。这样,您将跳过不包含字符串 Console.
的每一行
为了避免索引越界,我应该先检查当前行是否包含单词 "Console" 并检查长度:
import java.io.*;
public class Main
{
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)
{
if(line.contains("Console"))
{
if(line.length()>30){
pn=line.substring(0,30); System.out.println(pn);}
}
System.out.println();
}
input.close();
}
catch (Exception err)
{
err.printStackTrace();
}
}}
我正在编写一个简单的代码,它仅显示 "console" 类型的进程的 name 使用 任务列表 java.
由于此代码中的字符串索引越界错误,我无法这样做。 我使用索引 36 到 43,因为在这些代码中,我在代码输出期间获得了进程类型,我们使用任务列表打印所有进程。进程名称的 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){
....
据我所见,tasklist 在开头打印了一个空行。一个简单的检查是 while 循环开始时的 if (!line.contains("Console")) continue;
。这样,您将跳过不包含字符串 Console.
为了避免索引越界,我应该先检查当前行是否包含单词 "Console" 并检查长度:
import java.io.*;
public class Main
{
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)
{
if(line.contains("Console"))
{
if(line.length()>30){
pn=line.substring(0,30); System.out.println(pn);}
}
System.out.println();
}
input.close();
}
catch (Exception err)
{
err.printStackTrace();
}
}}