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 に答える