Dizedeki belirli bir karakterden sonra karakterler kaldırılsın, sonra alt dize kaldırılsın mı?


140

Bu basit gibi görünüyor ve dizeleri / karakterler / regex tonlarca soru var, bu aptal hissediyorum, ama ben (başka bir dil hariç: Belirli bir nokta dışında tüm metni Kaldır) gereken tam olarak bulamadım .

Aşağıdaki kodu aldım:

[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);
    }

Yukarıdaki sorudaki çözümü denedim (sözdiziminin aynı olacağını umuyorum!) Ama hayır. Önce herhangi bir değişken uzunluğu olabilir queryString kaldırmak, sonra tekrar herhangi bir uzunluk olabilir sayfa adını kaldırmak istiyorum.

Bu sınamanın geçmesi için sorgu dizesini tam URL'den nasıl alabilirim?

Yanıtlar:


265

Dize manipülasyonu için,? Öğesinden sonra her şeyi öldürmek istiyorsanız, bunu yapabilirsiniz.

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

Edit: Son eğik çizgi sonra her şey, gibi bir şey yapmak

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

Alternatif olarak, bir URL ile çalıştığınız için bununla bu kod gibi bir şey yapabilirsiniz

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

1
Yoksa sonuncusu /mu?
Charlie Salts

4
Oh, evet, bunu tekrar oku. Bu durumda LastIndexOf ("/") yapabilir.
Anthony Pegram

1
Bunu yapmak için iki yol sağladığınız için teşekkür ederiz x2!
Salı

1
@gsvirdi, bu durumda, bu URL'yi yükleyebilir Uri urive sonra erişebilirsiniz uri.Segments. Bu bir dizi döndürür ve "somepage.aspx" son öğe olur.
Anthony Pegram

1
Seçici olmaktan nefret ediyorum, ama indeks> = 0 olmamalı mı?
Jenny O'Reilly

103

İlk önce her şeyi kaldırmak için /

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

İlkinden sonra her şeyi kaldırmak için /

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

Her şeyi sondan önce kaldırmak için /

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

Sonuncudan sonra her şeyi kaldırmak için /

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

Belirli bir karakterden sonra karakterleri kaldırmak için daha da basit bir çözüm String.Remove () yöntemini aşağıdaki gibi :

İlkinden sonra her şeyi kaldırmak için /

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

Sonuncudan sonra her şeyi kaldırmak için /

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

7
Dize "/" içermiyorsa bunların hepsinin bir örnek atacağını unutmayın. Açıkçası, orijinal sorudaki gibi sabit kodlu dizelerle çalışıyorsanız, ancak çoğu durumda bunu dikkate almak isteyeceksiniz.
Elezar

7

İşte başka bir basit çözüm. Aşağıdaki kod '|' işaretinden önce her şeyi döndürür karakter:

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

Aslında, istediğiniz kadar ayırıcıya sahip olabilirsiniz, ancak yalnızca bir ayırma karakterine sahip olduğunuzu varsayarsak, '|' karakterinden sonra her şeyi nasıl elde edeceğiniz aşağıda açıklanmıştır:

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

(İkinci kodda değiştirdiğim tek şey dizinin diziniydi.)


6

Uri sınıfı genellikle Url'leri manipüle etmek için en iyi bahistir.


7
Bir bağlantı örneği iyi olurdu.
Trevor

1

Belirli bir karakterden önce her şeyi kaldırmak için aşağıda kullanın.

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

Bunun yaptığı, $ char'dan önce her şeyi alır ve kaldırır. Şimdi bir karakterden sonra öğeleri kaldırmak istiyorsanız, + 1'i -1 olarak değiştirin ve hazırsınız!

Ancak bir URL için, bunu almak için yerleşik .NET sınıfını kullanırdım.


1

Request.QueryStringiçindeki parametersve değerlerini almanıza yardımcı olurURL

misal

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

bu nedenle özel ad değişkeni dave değerine eşit olmalıdır

Saygılarımızla


0

İkinci Hightechrider: sizin için önceden oluşturulmuş özel bir Url sınıfı var.

Ayrıca PHP'nin replaceAll, arama motoru için normalde de yapabileceğiniz düzenli ifadeler kullandığına işaret etmeliyim - RegEx sınıfına bakın.


0

kaldırmak için .NET'in yerleşik yöntemini kullanabilirsiniz QueryString. yaniRequest.QueryString.Remove["whatever"];

Burada her ne ait [] şeklindedir adına querystringkaldırmak istediğiniz.

Şunu deneyin ... Umarım bu yardımcı olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.