2012-02-04 2 views
0

Javaでの.javaソースファイルのレクサーの作成。私は文字のストリームを持っていて、レクサーが一行のコメントをスキップさせようとしています。Javaソースファイルの新しい行:Characterクラスを使ってそれらをテストするには?

私はそれぞれの文字をループします。私の仮説は、最初にコメントの//を検出し、次の改行文字まで次の文字をスキップすることができるということです。しかし、それは動作することはできませんし、私は新しい行の文字を検出することはできません。これは私のコードです:

//is it a single line comment? 
if(currentChar == '/') { 

    //loop through char:s until next new line 
    while(inComment == true) { 
     //increment loop 
     i++; 

     //extract next char 
     currentChar = stringInput.charAt(i); 

     //check if current character is a new line 
     if((currentChar == '\n') || (currentChar == '\r')) { 
      inComment = false; 
      System.out.println("End Of Line Comment.");        
     } 
    } 
} 

したがって、.javaソースファイルには改行文字がありますか? Characterクラスを使用して、または他の方法でそれらを検出することは可能ですか?

事前に感謝します。

SOLUTION:

改行文字はBufferedReaderのを使用して.javaソースファイルからコードを読み取り、StringBuilderのに行を追加しながら、失われたように見えます。この問題は、代わりにorg.apache.commons.io.FileUtilsのreadFileToString()を使用して.javaファイルを読み込んで解決しました。

+0

ここで、inCommentをtrueに設定しますか? if(currentChar == '/')部分の後にする必要があります。 – huelbois

+0

私は/前をチェックします。次に、ブロックとシングルラインのコメントを区別するために、別の/または*を再度チェックします。しかし、あなたは正しいです、ありがとうございます。 – jpaw

答えて

0

これで動作するはずですが、比較のcurrentChar == '\ n'は正常に動作し、行末に達したときにtrueを返します。

ファイルの読み込み時に改行が既に失われていないことを確認してください。 BufferedReader.readLine()を使用して?そのような場合は、別の方法でファイルを文字列に読み込みます。 jakarta commons-ioのFileUtils.readFileToStringを使用します。

+0

良い点。そうかもしれない。私はそれを試みます。ありがとう! – jpaw

+0

これは完全に機能しました!どうもありがとう! – jpaw

1

どのようにstringInputをお読みになりますか?

if (stringInput starts with "//") 
    readNextLine() 

はるかに短いとフォローしやすい:あなたはreadLineを使用している場合は、その理由だけで、この擬似コードに従っていません。 ヒント:String APIを読んでください。

+0

良い提案。しかし、stringInputはStringBuilderオブジェクトであり、charAt()を使って各文字を見てループしています。 – jpaw

+0

StringInputはどのように作成されますか?一行ずつ読んで追加していますか? –

+0

はい、私は行ごとに読み込み、stringInputに追加します。 – jpaw

0

if条件とwhileループの間で、inComment値をtrueに設定していますか?また、2つのスラッシュを確認する必要があります。

+0

あなたは正解です、ありがとうございます。ブロックの行と行の両方のコメントを検出するために、//*の前/後をチェックします。 – jpaw

関連する問題