0

我的项目中有一个输出文件,其中包含如下信息:

 <Keyword: begin >

 <Keyword: for >

 <Id: i >

我想逐行读取文件并将每个字符添加到字符串中。我的代码是这样的:

tokenArr = new ArrayList<String>();
BufferedReader input ;
String line,value="",type="";
int index=2;
char ch;

try
{   
    input = new BufferedReader(new FileReader(fileName));
    System.out.println("File is Opened!");
    while ((line = input.readLine())!=null)
    {
        ch = line.charAt(index);
        while( ch !=' ')
        {
            value += ch;
            index++;
            ch = line.charAt(index);
        }

如您所见,我的代码没有问题,但是当我运行它时,出现以下错误:

"Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 1" error ! 

索引是 2 因为我不想要前 2 个字符。你能帮我解决这个问题吗?

4

2 回答 2

0

您可能不会在内部 while 循环之后重置索引。另外,如果该行根本不包含空格字符怎么办?内部 while 循环只会在 index 到达时结束line.length(),因此 line.charAt() 会抛出一个StringIndexOutOfBoundsException

不要逐个字符地工作,而是使用 substring() 方法:

while((line = input.readLine()) != null) {
    if(line.length() > 2) {
      line = line.substring(2); //I don't want the first two chars
      if(!line.contains(" ")) {
        value += line + "\n";
        // if value were a StringBuilder value.append(line).append('\n');
      }
      else {
        value += line.substring(0, line.indexOf(" ")) + "\n";
        // StringBuilder value.append(line.substring(0, line.indexOf(" ")).append('\n');
      }
}
于 2013-06-15T06:58:38.060 回答
0

您需要以这种方式稍微修改您的 while 循环:

while ((line = input.readLine())!=null)
{
    if (line.length() > 3 )//because you starting with index 2
    {
         ch = line.charAt(index);
         while( ch !=' ')
         {
            value += ch;
            index++;
            ch = line.charAt(index);
            index = 2; //reset index to 2
         }
    }
}
于 2013-06-15T07:00:53.723 回答