1. ホーム
  2. c#

[解決済み] 文字列中の特定の文字以降の文字を削除し、その後、部分文字列を削除しますか?

2022-04-21 05:24:42

質問

文字列/文字/正規表現に関する多くの質問があり、簡単そうに見えるのに、これを投稿するのはちょっと馬鹿みたいですが、私が必要とするものを見つけることができませんでした(他の言語では別ですが。 ある点以降のすべてのテキストを削除する ).

次のようなコードになりました。

[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 からクエリ文字列を削除するにはどうすればよいですか?

どのように解決するのですか?

文字列操作の場合、「?」以降をすべて消すだけなら、次のようにすればよいでしょう。

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で作業しているので、次のようなコードで何かすることもできます。

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