2011-12-03 38 views
11

我遇到了一個問題,試圖找出此問題。我需要 「修復」 一些鏈接,這裏有一個例子:從字符串中刪除文本,直到達到某個字符

  1. www.site.com/link/index.php?REMOVETHISHERE
  2. www.site.com/index.php?REMOVETHISHERE

所以基本上我想刪除一切,直到它到達?字符。謝謝你的幫助。

+0

你能保證只有一個 '?'在你的字符串? –

+0

是的。 Parapura已經發布了我想要的,謝謝。 –

+0

@DanielMallott:如果它是一個有效的URL,它有* *只有一個''... – Fischermaen

回答

18
string s = @"www.site.com/link/index.php?REMOVETHISHERE"; 
s = s.Remove(s.LastIndexOf('?')); 
//Now s will be simply "www.site.com/link/index.php" 

應該這樣做

+1

謝謝,正是我想要的。我真是個白癡。我會在9分鐘內接受它。 –

+0

挑剔,但'IndexOf'可能會比'LastIndexOf'更可取# – minnow

+0

@minnow why ???如果字符串有多個'?'OP可能需要最後一個 –

2

使用string.split

string URL = "www.site.com/link/index.php?REMOVETHISHERE" 
var parts = URL.Split('?'); 

然後parts[0]將包含 「www.site.com/link/index.php」 和parts[1]將包含 「REMOVETHISHERE」。然後你可以使用你想要的部分。

您應該添加檢查,以確保有試圖訪問數組的第二個元素前兩個部分。你可以(例如)檢查字符串是否包含「?」在嘗試撥打Split之前。

3

儘管正確製作的字符串操作將起作用,但更一般的提取部分URI信息的方法是使用System.Uri類型,該類型具有封裝這些操作的方法,例如,

var uri = new Uri("http://www.site.com/link/index.php?REMOVETHISHERE"); 
var part = uri.GetLeftPart(UriPartial.Path); 

這將更清楚地傳達您的代碼的意圖,您將重新使用已知可用的當前實現。

構造函數System.Uri如果字符串不代表有效的URI,將會拋出一個異常,但無論如何,如果遇到無效的URI,您可能會想在程序中調用其他一些行爲。要檢測無效的URI,您可以捕獲異常或使用重載之一。

0

要刪除最後一個 「?」及其之後的所有:

string input = @"www.site.com/link/index.php?REMOVETHISHERE"; 
    input = input.Remove(input.LastIndexOf('?')); 

    OR 

    string input = @"www.site.com/link/index.php?REMOVETHISHERE"; 
    input = input.Substring(0, input.LastIndexOf('?')); 

現在輸出將是:

www.site.com/link/index.php 
相關問題