2016-09-06 7 views
-3

私はこの機能をCSVファイルから行を消去しようとしている:なぜ私のJavaプロジェクトで.substring()がうまく動作しないのですか?

public void borrarAlumno(String id) throws IOException { 

    BufferedReader br = new BufferedReader(new FileReader(archivo)); 
    StringBuffer sb = new StringBuffer(""); 
    String line; 
    while ((line = br.readLine()) != null) { 
     //System.out.println(line.substring((5))); 
     if(!" ".equals(line) && line != null){ 
      if(!line.substring(0, 6).equals(id)){ 
       sb.append(line); 
      } 
     } 
    } 
    br.close(); 
    FileWriter fw = new FileWriter(new File(archivo)); 
    fw.write(sb.toString()); 
    fw.close(); 


} 

しかし、私はこのエラーを取得:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -5 
    at java.lang.String.substring(Unknown Source 

ファイルの最初の行がある:Matricula,Nombre,Apellido。なぜ私はIndexOutOfBoundsExceptionを取得していますか?

+0

:このメソッドは、String.startsWithです。 – npinti

+0

でも同じことが起こる例外@npinti –

+0

これは部分文字列に関する質問には答えませんが、 '!line.substring(0、6).equals(id)'の代わりに '!line.startsWith(id)あなたの状態をチェックするときに多くの問題を避けるために。 –

答えて

2

String#subStringのjavadocの述べたようにあなたのコードがline.length() < 6場合IndexOutOfBoundsExceptionの原因である次の呼び出しline.substring(0, 6)をしている:

Throws: IndexOutOfBoundsException - if the beginIndex is negative, or endIndex is larger than the length of this String object, or beginIndex is larger than endIndex .

あなたは可能性がありこの問題を回避するために、ifの記述を次のように変更してください。

if (line.length() >= 6 && !line.substring(0, 6).equals(id)) { 
    sb.append(line); 
} 

無関係

あなたは最初ifで再びそれをチェックするために、完全に不要であるwhile状態でline != null場合をチェックしているので。

0

例外はSystem.out.println(line.substring((5)));である必要があります。String#substring(int)がパラメータを検証すると、それは文字列の長さから減算されるためです。 lineの長さがゼロの場合は、0 - 5 < 0が表示され、例外がスローされます。その行を次の条件ブロックの内側に移動することができますが、それ以降はさらにデバッグする必要があります。

0

文字列が部分文字列の先頭よりも短い場合にスローされるIndexOfBounds。あなたはサブの前に、文字列の長さをチェックする必要があります

if(line.length() > 5) System.out.println(line.substring((5))); 
1

行が6文字より短い場合、コードが失敗します。 JavaはStringに異なるメソッドを持っています。これは、文字列が他の文字列で始まるかどうかをチェックしたいときに便利です。 ` "`ラインは=" .equals(ライン) "` `になる必要があります!":!あなたは確かにここにバグがあり

if (!line.startsWith(id)) { 
    sb.append(line); 
} 
関連する問題