2016-03-28 8 views
0

私は入力が文字列/整数/倍精度/その他を持っているかどうかを判断するLexerで作業しようとしています。私は文字列以外のものを扱っているかどうかを正しく判断しましたが、文字列部分を処理する方法を理解するのに問題があります。Javaの文字列の終わりを確認します

は、それでは、私は3つの入力を持っているとしましょう:

input = "\"asd\"" 
input2 = "\"The string \"String\" is really great\"5432" 
input3 = "\"The string \"String\" is really great\"5432"\One more\"" 

Expected output from: 
input = <STRING:asd> //Works with current code 
input2 = <STRING:The string "String" is really great><INTEGER 5432> //Broken 
input3 = <STRING:The string "String" is really great><INTEGER 5432> <STRING:One more>//ALSO BROKEN 

出力処理が行われ、作業は非常にこの問題は、文字列の終了方法を処理することです、問題はありません。 これは、引用符が含まれていない文字列を処理するのは簡単ですし、これは私がそれに扱わきたか、現在ある:

StringBuilder sb = new StringBuilder(); 
    int count = 1; 
    pos++; 
    current = input.charAt(pos); 
    boolean last = false; 
    char next = input.charAt(pos+1); 
    while (current != '"'){ 
     sb.append(current); 
     pos++; 
     current = input.charAt(pos); 
     next = input.charAt(pos+1); 
    } 
    tokens.add(new Token(TokenType.STRING,sb.toString())); 

最初の引用符を文字列で表示されたときに今、私のコードに問題が表示されます(INPUT2またはINPUT3を参照します例えば)。私はcharで入力charをチェックしています。else-ifブランチは引用符で始まり、pos ++と現在の更新(例えばinput2の 'T' charを参照しています)があります。

文字列が終了したかどうかを判断するにはどうすればよいですか(5432が最初の文字列の一部ではなくinput2の整数であるかどうか)?

+0

あなたが解析している文字列の長さに達するまでループするために 'input.length'プロパティを試しましたか? – Phoenix

+0

うーん、私はそれをすることができますが、私はそれが私を助けることができないか分かりません。場合は、私はそれが1つの文字列ではなく、文字列、整数、文字列であることを決定する "番号は" 5324 ""文字列を持っている。 – Banana

+0

そして、文字列を直接取得するために 'split()'の文字列を\t "char? – Phoenix

答えて

0

基本的にレクサーによれば、マーカを使用しているので、入力3からのSTRING、INT、STRINGの出力が正しいと思います。\"これをカットするだけでは、そのため\\\"はそれを切り捨てます.2つのバックスラッシュのうち最初にバックスラッシュが表示されます\とバックスラッシュと引用符\"は文字列に引用符を表示します。合計で表示される文字列は、単に引用符の表記である\"です。

関連する問題