2012-02-20 41 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 

我已經出節目太長,記得要做到這一點,最好的方式,但我原來的思路去是這樣的:

抓鬥每個參數並粘貼到一個臨時數組中,通過臨時數組運行並比較數組[i]是否等於任何其他參數名稱。如果是這樣,請刪除。如果不是,則返回到返回字符串。在循環結束時,打印返回字符串。

但是,這將需要O(n)的URI的長度加O(m)!爲數組的大小(m是參數的數量)。我認爲這將是非常糟糕的,因爲我將對所有傳入的URI以每分鐘5000次的速度運行此方法。有沒有更好的方法去解決這個問題或者一個開箱即用的java方法來處理一些開銷?

+2

你真的需要那樣做嗎? URL的接收者不能忽略重複(這是大多數實現已經做了什麼,除非你明確地尋找多值參數)? – Thilo 2012-02-20 08:21:12

+0

這就是我想要監視的URL列表。某些頁面具有相同的操作,但可能具有不同的URL(僅由多個重複參數的數量而不同),我寧願爲一個給定的操作提供一頁而不是一打。 – user625032 2012-02-20 08:59:43

回答

1

您可以將鍵/值對粘貼到Map<String,String>。這將自動處理重複密鑰,並且將非常容易編碼。

要驗證使用相同的密鑰參數具有相同的值,你可以檢查的put()返回值:它應該是null或等於你剛剛插入的值。

+0

啊,很好,我忘了這個。不錯的演出! – user625032 2012-02-20 09:03:50

0

如果你堅持這樣做(不?),那麼你可以使用Map

對於每個參數 - 值對,將它們插入到地圖中。

您將只剩下唯一的參數,然後您可以使用它重建您的URI。

你會迭代你的參數 - 值對一次,然後迭代你的地圖一次重建的URI。或者,像Thilo說的那樣,你不能這樣做,讓接收者處理重複的內容。

相關問題