2011-01-27 10 views
0

もう一度、私は改行に気付いていないFileWriterに問題がありましたが、私はそれを助けて解決しました。以前と同じように、私は以前書かれたファイルを読むために古いコードをいくつか書きました。私は "|"区切り記号(pieces.useDelimiter( "|");)として使用します。 pieces.next()を呼び出すと、区切り文字までの次の文字列ではなく、次の文字だけが呼び出されます。私は何が欠けていますか? コードスニペット:Androidスキャナのデリミタの問題

try{ 
    mFile = new Scanner(newFile(loadPath)); 
    while(mFile.hasNextLine()){ 
     String input = mFile.nextLine(); 
     Scanner pieces = new Scanner(input); 
     pieces.useDelimiter("|"); 
     while(pieces.hasNext()){ 
      int row = Integer.valueOf(pieces.next()); 
      int col = Integer.valueOf(pieces.next()); 
      String pullPath = pieces.next(); 
      ...... 

}}

+0

文脈のためにいくつかのコードを投稿してください。 –

答えて

0

あなたはuseDelimiterに渡す文字列を正規表現として解釈されます。 |は正規表現の特殊文字なので、バックスラッシュでエスケープする必要があります。また、バックスラッシュそのものをエスケープする必要があります。これは、Javaコンパイラを通過するためです。

pieces.useDelimiter("\\|"); 

はまた、pieces.next()によって返される文字列は、区切り文字が含まれていることに注意してください:トリックを行う必要があり、次のようにその行を変更します。あなたはまた、区切り文字(複数可)をトリムするpullPathを調整する必要があるかもしれません

 int row = pieces.nextInt(); 
     int col = pieces.nextInt(); 

 int row = Integer.valueOf(pieces.next()); 
     int col = Integer.valueOf(pieces.next()); 

に置き換えることができます:私は、これらの行は、と思われます。

こちらがお役に立てば幸いです。

+0

チャームのように働いて、ありがとう!エスケープに関する情報へのリンクはありますか?私は決してそれに遭遇したことはありません... – weh

+0

@weh:標準のJava文字列リテラル構文についてはhttp://java.sun.com/docs/books/books/seconds_edition/html/lexical.doc.html#101089を試してみてください、およびhttp://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html(正規表現の構文については、「バックスラッシュ、エスケープ、および引用符」を参照してください)。 –