Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我得到一个字符串越界异常_Java - Fatal编程技术网

Java 为什么我得到一个字符串越界异常

Java 为什么我得到一个字符串越界异常,java,Java,我有下面的代码从文件中读入数据并将其存储在字符串变量中,现在当我运行它时,它会给我一个字符串越界异常。如何修复此错误 运行命令并出错: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1882 at java.lang.String.charAt(String.java:694) at IfCounter2.main(IfCounter

我有下面的代码从文件中读入数据并将其存储在字符串变量中,现在当我运行它时,它会给我一个字符串越界异常。如何修复此错误

运行命令并出错:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1882
    at java.lang.String.charAt(String.java:694)
    at IfCounter2.main(IfCounter2.java:92)
代码:

import java.io.*;
公共类IF2
{
//方法检查是否有单行注释
公共静态布尔线性注释(字符串行)
{
if(第行包含(“/”)
返回true;
返回false;
}
//方法检查是否有多行注释开始
公共静态布尔multilecommentstart(字符串行)
{
if(第行包含(“/*”)
返回true;
返回false;
}
//方法检查是否有多行注释结尾
公共静态布尔多重注释(字符串行)
{
if(第行包含(“*/”)
返回true;
返回false;
}
公共静态void main(字符串[]args)引发IOException
{
//用于跟踪ifs的变量
int ifCount=0;
//检查传递了多少个参数
int numArgs=args.length;
//看看所有的论点
//他们不想在评论中计算ifs************************************************--未输入任何注释
if(args[0].equals(“--nocomments”))
{
//为将位于args 1的文件创建新的BufferReader
BufferedReader=new BufferedReader(new FileReader(args[1]);
字符串行=null;
StringBuilder StringBuilder=新的StringBuilder();
字符串ls=System.getProperty(“line.separator”);
//从文本文件中读取
布尔多元素=真;
//在字符串变量中存储数据时忽略注释
而((line=reader.readLine())!=null)
{
如果(!MultilecommentStart(行))
{
多元素=真;
}//如果结束,则结束
if(多元素)
{
如果(!多重注释(行))
{
多元素=假;
}//如果结束,则结束
}//如果结束,则结束
如果(!lineComment(line)&&!multilecomment)
{
stringBuilder.append(行);
stringBuilder.append(ls);
}//如果结束,则结束
}//结束时
//使用stringBuilder数据创建新字符串
String tempString=stringBuilder.toString();
System.out.println(tempString);
//创建最后一个字符串以查找中的有效if,
//删除所有空白
字符串比较字符串=tempString.replaceAll(“\\s”,“”);
//系统输出打印项次(比较);
对于(int i=0;ifor(int i=0;i
上面的代码是您的问题。请注意,i0-(长度-1),这意味着charAt(i)是可以的。但是,然后执行i++并执行另一个charAt(i)所以当i==length-1时,i++之后的charAt将导致异常。

for(int i=0;i

上面的代码是您的问题。请注意,i0-(长度-1),这意味着charAt(i)是可以的。但是,然后执行i++并执行另一个charAt(i)。因此,当i==length-1时,i++之后的charAt将导致异常。

您的代码中存在大量问题。例如,当您执行类似操作时:

if (compareString.charAt(i) == 'i') 
    {
        i++;

        if (compareString.charAt(i) == 'f') 
        {
你在自食其果。当我指向这里的最后一个字符时,你会在第二个if中得到一个错误。我强烈反对这种嵌套的“if”检查来检查你试图做什么。它可能是代码中错误的无限来源。请看“switch”语句:

switch(compareString.charAt(i)) {
    case 'i':
       // do something
       break;
    case 'f':
       // do something else
       break;
}

您的代码中有一大堆问题。例如,当您执行以下操作时:

if (compareString.charAt(i) == 'i') 
    {
        i++;

        if (compareString.charAt(i) == 'f') 
        {
你在自食其果。当我指向这里的最后一个字符时,你会在第二个if中得到一个错误。我强烈反对这种嵌套的“if”检查来检查你试图做什么。它可能是代码中错误的无限来源。请看“switch”语句:

switch(compareString.charAt(i)) {
    case 'i':
       // do something
       break;
    case 'f':
       // do something else
       break;
}

默认情况下,for循环失败。如果