0

Java初心者なので、私は苦労していString.splitます。次の文字列をトークニズムしようとしています

"(3,3,{S,W,P},{P,W,P},{P,P,P}),(1,2,{S,E}),(2,1,{{S},{E}})"

"\\{|\\(|\\}|\\)|\\s|,"String.splitを使用した正規表現パターンで。

StringSplitOptions.RemoveEmptyEntries残念ながら、一致が発生するたびに空の文字列も返されます。これは、C#の場合と同様に抑制したいものです。

それどころか、使用StringTokenizerは非常にうまく機能しますが、非推奨になっているため、私はそれを避けようとしています。私の質問を明確にするために、私String.splitは次のトークナイザーを使用して取得するのと同等の動作を試みています

new StringTokenizer(input2, "{},() \t")

どのように進めればよいか提案してください。

4

3 に答える 3

2

まず、交互に使用する代わりに文字クラスを使用することで、これらのバックスラッシュのほとんどを削除できます。次に、クリストファーが言ったように、1つ以上の区切り文字+を照合するStringTokenizerの動作を模倣するためにを追加できます。

"[{},()\\s]+"

残念ながら、文字列が区切り文字で始まる場合、最初の空のトークンを防ぐ方法はありません。 末尾の空のトークンは自動的に削除されますが、先頭のトークンを自分で除外する必要があります。

もちろん、必要に応じてStringTokenizerを自由に使用することも、GuavaのSplitterなどのサードパーティツールを使用することもできます。

于 2012-05-06T00:56:23.960 に答える
0

この正規表現で試してください:

(\\{|\\(|\\}|\\)|\\s|,)+

そしてもちろん:StringTokenizerは非推奨ではありませんhttps://stackoverflow.com/a/6983926/278842

于 2012-05-05T22:59:28.620 に答える
0

commons-langパッケージを試して、StrTokenizerクラスを探してください。区切り文字に基づいて文字列の分割を処理し、空の値を処理するオプションがあります(nullとして返すか、無視します)。

于 2012-05-06T00:25:15.463 に答える