- - PR -
文字列の解析について
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-19 11:59
<key>=<value>,<key>=<value>, ...
となっている文字列を解析して、 Mapクラスのインスタンスに keyとvalueを追加していきたいと思っています。 * ","および"="は、 エスケープ処理をして文字列中に含まれている可能性があります。 そこで実現方法として以下を考えてみました。 1)String#split()を使う 2)parserをつくる 3)その他 しかし、以下のような問題があります。 1)エスケープ処理を加えた文字列は区切り文字からはずす、 ということができない。 2)コードが複雑になる なるべくシンプルな実装にしたいのですが、 何かよい方法はないでしょうか。 * 環境はJDK5.0です。 | ||||||||
|
投稿日時: 2007-11-19 12:12
split()は使えないですね。普通に1文字ずつ読むパーザを書いても、さほど大きなコードにならないと思いますよ。
| ||||||||
|
投稿日時: 2007-11-19 13:33
3)その他
正規表現を駆使してみたら割とシンプル?逆に複雑? サンプルコードを書いてみましたが、テストが不十分です。
| ||||||||
|
投稿日時: 2007-11-19 13:51
実装をシンプルにしたいのであれば、 解析対象の文字列のルールをシンプルにすべきです。 エスケープなんてルールを入れなければよいのです。 ただ、要求される文字列のパーサを書いても、 そんなに複雑にならないかと思います。 | ||||||||
|
投稿日時: 2007-11-19 14:02
スフレさん ////////////////////////////////////////
おっしゃる通り、parserをつくったところで さほど大きなコードにはならないと思っています。 ただ、正規表現などで処理できれば数行で済ませられるので それと比較して複雑かどうか という意味でした。 /////////////////////////////////////////////////// Rayさん /////////////////////////////////////////// ありがとうございます。 せっかくサンプルを呈示していただいたのですが、 こちらの表記があいまいなために誤解を招いた点があります。 <key>=<value>,<key>=<value>, ... というのは、具体的には key1=value1,key2=value2,key3=value3 のような文字列のことです。 /////////////////////////////////////////////////// かつのりさん ////////////////////////////////////// おっしゃる通りだと思います。 ただ、今回は文字列のルールは決定事項で変更できないのです。 /////////////////////////////////////////////////// | ||||||||
|
投稿日時: 2007-11-19 14:07
(アスタリスクは、デコレーションなのですね。) カンマとイコールの2種類が問題なのですよね。 エスケープはどのような方式でしょうか? C や Java のように \ などを前置するのが単純ですが、それ以外の方式だと途端に複雑になります。 \ の前置ならば、パースも、 (1) \ の対処 (2) = と , の対処 を独立してできるので処理も楽です。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||
|
投稿日時: 2007-11-19 14:10
私はあまり正規表現は好きではないので、多少、行数がかかっても for や if で切り分けて行くほうが良いと思います。 正規表現は、結局は JavaScript でテトリスを10行でコーディングする、みたいなトリッキーなものになってしまい、行数は少なくても複雑さは少なくならないと思います。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||
|
投稿日時: 2007-11-19 14:13
unibonさん
> (アスタリスクは、デコレーションなのですね。) はい、その通りです。 記述がわかりにくくなってしまい、すいません。 > エスケープはどのような方式でしょうか? = -> \= というような\前置方式です。 [ メッセージ編集済み 編集者: 84 編集日時 2007-11-19 14:14 ] |
1|2|3
次のページへ»