2011-12-03 21 views
11

これを理解する際に問題があります。 特定の文字に達するまで文字列から文字列を削除します。

  • www.site.com/index.php?REMOVETHISHERE
    1. www.site.com/link/index.php?REMOVETHISHERE:私はここの例で、いくつかのリンクを "修正" する必要があります

      基本的に私はそれがすべてに達するまですべてを削除したいですか?キャラクター。ご協力いただきありがとうございます。

    +0

    は、あなただけの1を保証することができます '?'あなたの弦で? –

    +0

    うん。 Parapuraはすでに私が望むものを投稿しました、ありがとう。 –

    +0

    @DanielMallott:もしそれが有効なURLであれば、それはただ1つの '? 'を持っています... – 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

    ニックピッキングですが、おそらく 'IndexInfo'は' 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を" が含まれます。それで、いつでもあなたが望む部分を使うことができます。

    アレイの2番目の要素にアクセスする前に、2つの部分があることを確認するチェックを追加する必要があります。たとえば、文字列に "?"が含まれていることを確認できますか? 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を検出するには、例外をキャッチするか、TryCreate()オーバーロードのいずれかを使用します。

    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