2012-02-20 4 views
0

文字列がroot?param1=...&param2=...&param3=...であり、重複するパラメータを削除するjavaメソッドを作成したいとします。値は常に同じですが、アプリケーションの機能ごとにパラメータが複製されることがあります(要求しないでください)。文字列から重複したURIパラメータを削除する最適な方法は何ですか?

グラブ:そのため、

HTTP://root?param1=value&param2=value2&param2=value2param3=value3&param3=value3&param1=value&param1=value 

は、私はプログラミングの外にこれを行うための最善の方法を覚えておくにはあまりにも長い間してきたが、思考の私の元の列車はこのような何かを行ってきました

HTTP://root?param1=value&param2=value2&param3=value3 

なり各paramとtemp配列にスティックし、temp配列を実行し、array [i]が他のparam名と等しいかどうかを比較します。その場合は削除してください。そうでない場合は、戻り文字列に追加します。ループの終わりに、リターン文字列を出力します。

しかし、これにはURIの長さにO(m)を加えたO(n)が必要です!配列のサイズ(mはパラメータの数)で指定します。私は、すべての着信URIに対してこのメ​​ソッドを毎分約5,000x実行することを考えれば、かなり悪いと思う。これについて、またはオーバーヘッドの一部を処理するすぐに使えるJavaメソッドについて、より良い方法がありますか?

+2

本当に行う必要がありますか? URLの受信者が重複を無視することはできません(多値のパラメータを明示的に検索しない限り、ほとんどの実装は既に実行しています)。 – Thilo

+0

URLのリストを監視する方法です。特定のページは同じ動作をしますが、URLが異なる場合があります(複数の重複パラメータの数だけ変化します)。 – user625032

答えて

1

キー/値のペアをMap<String,String>に貼り付けることができます。それは自動的に重複した鍵を処理し、コード化するのが非常に簡単になります。

同じキーのパラメータが同じ値であることを確認するには、戻り値put()を確認することができます。これはnullであるか、挿入したばかりの値と同じです。

+0

ああ、優秀、私はこれについて忘れてしまった。良いショー! – user625032

0

これを行うことを強くお勧めする場合は、Mapを使用します。

それぞれのパラメータと値のペアについて、それらをマップに挿入します。

あなたはURIを再構築するために使用できる一意のパラメータだけを残します。

パラメータと値のペアを一度反復してから、マップを一度反復してURIを再構築します。

Thiloが言ったように、これを行うことはできず、受信者に複製物を処理させることはできません。