文字列内の特定の文字の後の文字を削除してから、部分文字列を削除しますか?


140

これが単純なようで、文字列/文字/正規表現にたくさんの質問があるとき、私はこれを馬鹿げた投稿のように感じますが、必要なものを十分に見つけることができませんでした(別の言語を除いて:特定のポイントの後にすべてのテキストを削除する)。

私は次のコードを持っています:

[Test]
    public void stringManipulation()
    {
        String filename = "testpage.aspx";
        String currentFullUrl = "http://localhost:2000/somefolder/myrep/test.aspx?q=qvalue";
        String fullUrlWithoutQueryString = currentFullUrl.Replace("?.*", "");
        String urlWithoutPageName = fullUrlWithoutQueryString.Remove(fullUrlWithoutQueryString.Length - filename.Length);

        String expected = "http://localhost:2000/somefolder/myrep/";
        String actual = urlWithoutPageName;
        Assert.AreEqual(expected, actual);
    }

私は上記の質問の解決策を試しました(構文が同じであることを願っています!)まず、可変長のqueryStringを削除してから、ページ名を削除します。これも、任意の長さにすることができます。

このテストに合格するように、完全なURLからクエリ文字列を削除するにはどうすればよいですか?

回答:


264

文字列操作の場合、?の後のすべてを殺したいだけなら、これを行うことができます

string input = "http://www.somesite.com/somepage.aspx?whatever";
int index = input.IndexOf("?");
if (index > 0)
   input = input.Substring(0, index);

編集:最後のスラッシュの後のすべての場合、次のようなことをしてください

string input = "http://www.somesite.com/somepage.aspx?whatever";
int index = input.LastIndexOf("/");
if (index > 0)
    input = input.Substring(0, index); // or index + 1 to keep slash

あるいは、URLを使用しているので、次のコードのようにURLで何かを行うことができます

System.Uri uri = new Uri("http://www.somesite.com/what/test.aspx?hello=1");
string fixedUri = uri.AbsoluteUri.Replace(uri.Query, string.Empty);

1
それとも最後/ですか?
チャーリーソルト

4
ああ、そうです、もう一度読んでください。その場合、彼はLastIndexOf( "/")を実行できます。
Anthony Pegram 2010

1
これを行う2つの方法を提供してくれたx2に感謝します!
SventoryMang 2010

1
@gsvirdi、その場合、そのURLをUri uriにロードして、にアクセスできますuri.Segments。これにより配列が返され、「somepage.aspx」が最後のアイテムになります。
Anthony Pegram 2012

1
うるさいのは嫌いですが、インデックス> = 0にすべきではありませんか?
ジェニー・オライリー2013年

103

最初の前にすべてを削除するには /

input = input.Substring(input.IndexOf("/"));

最初の後にすべてを削除するには /

input = input.Substring(0, input.IndexOf("/") + 1);

最後の前のすべてを削除するには /

input = input.Substring(input.LastIndexOf("/"));

最後のすべてを削除するには /

input = input.Substring(0, input.LastIndexOf("/") + 1);

指定された文字の後に文字を削除するさらに簡単な解決策は、次のようにString.Remove()メソッドを使用することです

最初の後にすべてを削除するには /

input = input.Remove(input.IndexOf("/") + 1);

最後のすべてを削除するには /

input = input.Remove(input.LastIndexOf("/") + 1);

7
文字列に「/」がまったく含まれていない場合、これらはすべて例をスローすることに注意してください。元の質問のようにハードコードされた文字列で作業している場合、これは問題になりませんが、ほとんどの場合、それを考慮に入れる必要があります。
Elezar、2015年

7

ここに別の簡単な解決策があります。次のコードは '|'の前のすべてを返します キャラクター:

if (path.Contains('|'))
   path = path.Split('|')[0];

実際、セパレーターはいくつでも持つことができますが、分離文字が1つしかない場合は、 '|'の後にすべてを取得する方法を次に示します。

if (path.Contains('|'))
   path = path.Split('|')[1];

(2番目のコードで変更したのは、配列のインデックスだけでした。)



1

特定の文字の前のすべてを削除するには、以下を使用します。

string1 = string1.Substring(string1.IndexOf('$') + 1);

これが行うことは、$ charの前にあるすべてのものを取り、それを削除することです。キャラクターの後のアイテムを削除したい場合は、+ 1を-1に変更するだけで準備完了です!

しかし、URLについては、組み込みの.NETクラスを使用してそれを取得します。


1

Request.QueryString あなたが得るのに役立ちます parameters含まれるおよび値URL

string http = "http://dave.com/customers.aspx?customername=dave"
string customername = Request.QueryString["customername"].ToString();

したがって、customername変数はdaveと等しくなければなりません。

よろしく


0

Hightechriderの2番目:既に構築された専用のURLクラスがあります。

ただし、PHPのreplaceAllでは検索パターンに正規表現を使用していることも指摘する必要があります。これは.NETでも実行できます。RegExクラスを見てください。


0

.NETの組み込みメソッドを使用してを削除できますQueryString。つまり、Request.QueryString.Remove["whatever"];

ここでの[]の名前でquerystring削除します。

これを試してみてください...これが役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.