2017-03-26 16 views
0

特定の条件を満たす文字が現れる直前にReaderから文字列を読みたいと思います。それが動作特定の文字の前に文字列を読み取る方法

private boolean isSatisfying(int codePoint) { 
    return codePoint == '@' || codePoint == '$'; // for example 
} 

public String read(Reader reader) { 
    StringBuilder result = new StringBuilder(); 
    for (int codePoint = -1 ; (codePoint = reader.read()) != -1 ;) { 
    if (isSatisfying(codePoint)) { 
     break; 
    } 
    result.appendCodePoint(codePoint); 
    } 
    return result.toString(); 
} 

が、read()を実行した後readerのポインタが条件を満たすキャラクタ(上記の例で@又は$)、ない結果の文字列の末尾にある:私は、次のコードを試してみました。

readerのポインターを結果ストリングの最後に残したいが、Readerというポインターを戻す方法はありません。 それを達成する良い方法はありますか?

public String read(Reader reader) { 
    StringBuilder result = new StringBuilder(); 
    for (int codePoint = -1 ; codePoint ;) { 
    if (isSatisfying(codePoint)) { 
     break; 
    } 
    result.appendCodePoint(codePoint); 
    codePoint = reader.read()) != -1; 
    } 
    return result.toString(); 
} 
+0

この作業で不運なことはありますか? – 0xDEFACED

答えて

0

は、あなたのコードポイントを設定します。ここではドキュメントを参照してください。

​​

0

あなたがこれを行うに緩衝リーダーが必要です:あなたは、このようなループ条件のためにそれを追加した後

0

私はちょうど代わりのブレーク(結果文字列に特殊文字が含まれていますが、ファイル全体を処理します)

public String read(Reader reader) { 
    StringBuilder result = new StringBuilder(); 
    for (int codePoint = -1 ; (codePoint = reader.read()) != -1 ;) { 
    if (isSatisfying(codePoint)) { 
     continue; 
    } 
    result.appendCodePoint(codePoint); 
    } 
    return result.toString(); 
} 
を継続使用したいです

ファイル全体を処理したくない場合は、の改行を使用しますが、リターンラインは変更してください。

return result.toString().substring(0, result.toString().length()-1); 
関連する問題