Rimuovere i caratteri dopo il carattere specifico nella stringa, quindi rimuovere la sottostringa?


141

Mi sento un po 'stupido nel postare questo quando questo sembra un po' semplice e ci sono tonnellate di domande su stringhe / caratteri / regex, ma non sono riuscito a trovare esattamente ciò di cui avevo bisogno (tranne in un'altra lingua: Rimuovi tutto il testo dopo un determinato punto ).

Ho il seguente codice:

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

Ho provato la soluzione nella domanda sopra (sperando che la sintassi fosse la stessa!) Ma no. Voglio prima rimuovere queryString che potrebbe essere di qualsiasi lunghezza variabile, quindi rimuovere il nome della pagina, che potrebbe essere di nuovo di qualsiasi lunghezza.

Come posso ottenere la rimozione della stringa di query dall'URL completo in modo che questo test passi?

Risposte:


267

Per manipolare le stringhe, se vuoi semplicemente uccidere tutto dopo il?, Puoi farlo

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

Modifica: se tutto dopo l'ultima barra, fai qualcosa di simile

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

In alternativa, poiché stai lavorando con un URL, puoi farci qualcosa come questo codice

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

1
O sarebbe l'ultimo /?
Charlie Salts,

4
Oh, sì, rileggilo. Può fare LastIndexOf ("/") in quel caso.
Anthony Pegram,

1
Grazie x2 per aver fornito due modi per farlo!
SventoryMang,

1
@gsvirdi, in tal caso, è possibile caricare l'URL in Uri urie quindi accedere uri.Segments. Ciò restituirà un array e "somepage.aspx" sarà l'ultimo elemento.
Anthony Pegram,

1
Odio essere pignolo, ma non dovrebbe essere indice> = 0?
Jenny O'Reilly,

104

Per rimuovere tutto prima del primo /

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

Per rimuovere tutto dopo il primo /

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

Per rimuovere tutto prima dell'ultimo /

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

Per rimuovere tutto dopo l'ultimo /

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

Una soluzione ancora più semplice per rimuovere i caratteri dopo un carattere specificato è utilizzare il metodo String.Remove () come segue:

Per rimuovere tutto dopo il primo /

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

Per rimuovere tutto dopo l'ultimo /

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

7
Ricorda che tutti daranno un esempio se la stringa non contiene affatto un "/". Ovviamente questo non sarà un problema se stai lavorando con stringhe codificate come nella domanda originale, ma nella maggior parte dei casi, ti consigliamo di prenderlo in considerazione.
Elezar,

7

Ecco un'altra soluzione semplice. Il seguente codice restituirà tutto prima del '|' carattere:

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

In effetti, potresti avere tutti i separatori che vuoi, ma supponendo che tu abbia un solo carattere di separazione, ecco come otterrai tutto dopo il '|':

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

(Tutto quello che ho cambiato nel secondo pezzo di codice era l'indice dell'array.)


6

La classe Uri è generalmente la soluzione migliore per manipolare gli URL.


7
Un esempio di collegamento sarebbe carino.
Trevor,

1

Per rimuovere tutto prima di un carattere specifico, utilizzare di seguito.

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

Quello che fa è, prende tutto prima del $ char e lo rimuove. Ora se vuoi rimuovere gli oggetti dopo un personaggio, cambia da +1 a -1 e sei pronto!

Ma per un URL, userei la classe .NET integrata per prenderlo.


1

Request.QueryString ti aiuta a ottenere il parameters includere i valori e all'interno diURL

esempio

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

quindi la variabile customername dovrebbe essere uguale a dave

Saluti


0

Secondo Hightechrider: esiste già una classe Url specializzata creata per te.

Devo anche sottolineare, tuttavia, che il PHP sostituisce Tutti usa espressioni regolari per il modello di ricerca, cosa che puoi fare anche in .NET - guarda la classe RegEx.


0

puoi usare il metodo incorporato di .NET per rimuovere il file QueryString. vale a dire,Request.QueryString.Remove["whatever"];

qui qualunque cosa in [] è il nome del querystringche si desidera rimuovere.

Prova questo ... spero che questo possa aiutare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.