こんにちは、テキストを明確に定義されたトークンに転送するクラスを作成しようとしています。
文字列は、次のようなコードに多少似ています(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
}