こんにちは、テキストを明確に定義されたトークンに転送するクラスを作成しようとしています。
文字列は、次のようなコードに多少似ています(brown) "fox" 'c';。私が取得したいのは(スキャナーからのトークンまたはスリット後の配列のいずれかであり、両方ともうまく機能すると思います)( , brown , ) , "fox" , 'c' , ;(それらは潜在的なトークンであるため)、次のものが含まれます。
'と で引用されたテキスト"- 小数点ありまたはなしの数値
- 括弧、中括弧、セミコロン、等号、シャープ、||、<=、&&
\s+|(?=[;\{\}\(\)]|\b)現在、私はスキャナーでそれを行っています。区切り文字で () などを個別に指定できないという問題がありまし"た'。私は本当にそれを避けたいので、いくつかの否定的な先読みを追加しようとしまし"たが、運が悪い.
StreamTokenizer を使用しようとしましたが、異なる引用符が保持されません..
PSサイトを検索してグーグルで検索しようとしましたが、スキャナー関連/正規表現関連の質問がたくさんありますが、問題を解決するものを見つけることができませんでした.
編集1:
これまでのところ、私は\s+|^|(?=[;{}()])|(?<![.\-/'"])(?=\b)(?![.\-/'"])
十分に明確ではないかもしれませんが、次のようなものがある場合:
"foo";'bar')(;{
gray fox=-56565.4546;
foo boo="hello"{
私は取得したい:
"foo", ;, 'bar', ), (, ;_{
gray、fox、=、-56565.4546、;
foo、boo、=、"hello"、{
しかし、代わりに私は持っています:
"foo"、、、、、、;'bar'_ )_ (_ ;_{
gray、fox、=-56565.4546、;
foo、boo、="hello"、{
=と残りの間にスペースがある場合、たとえば : は次のようになることに注意してくださいgray fox = -56565.4546;。
gray、fox、=、-56565.4546、;
上記の正規表現で私がやっていることは次のとおりです。
Scanner scanner = new Scanner(line);
scanner.useDelimiter(MY_MENTIONED_REGEX_HERE);
while (scanner.hasNext()) {
System.out.println("Got: `" + scanner.next() +"`");
//Some work here
}