Zeichen nach bestimmten Zeichen in der Zeichenfolge entfernen und dann Teilzeichenfolge entfernen?

140

Ich fühle mich irgendwie dumm, dies zu posten, wenn dies einfach erscheint und es Unmengen von Fragen zu Zeichenfolgen / Zeichen / Regex gibt, aber ich konnte nicht genau das finden, was ich brauchte (außer in einer anderen Sprache: Entfernen Sie den gesamten Text nach einem bestimmten Punkt ).

Ich habe folgenden Code:

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

Ich habe die Lösung in der obigen Frage versucht (in der Hoffnung, dass die Syntax dieselbe ist!), Aber nein. Ich möchte zuerst den queryString entfernen, der eine beliebige variable Länge haben kann, und dann den Seitennamen entfernen, der wiederum eine beliebige Länge haben kann.

Wie kann ich die Abfragezeichenfolge aus der vollständigen URL entfernen, damit dieser Test erfolgreich ist?

SventoryMang
quelle

Antworten:

263

Wenn Sie für die String-Manipulation nur alles nach dem? Töten möchten, können Sie dies tun

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

Bearbeiten: Wenn alles nach dem letzten Schrägstrich, machen Sie so etwas wie

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

Da Sie mit einer URL arbeiten, können Sie alternativ etwas wie diesen Code damit tun

System.Uri uri = new Uri("http://www.somesite.com/what/test.aspx?hello=1");
string fixedUri = uri.AbsoluteUri.Replace(uri.Query, string.Empty);
Anthony Pegram
quelle
1
Oder wäre es das letzte /?
Charlie Salts
4
Oh ja, lies das noch einmal durch. In diesem Fall kann er LastIndexOf ("/") ausführen.
Anthony Pegram
1
Vielen Dank x2 für die Bereitstellung von zwei Möglichkeiten, dies zu tun!
SventoryMang
1
@gsvirdi, in diesem Fall können Sie diese URL laden Uri uriund dann darauf zugreifen uri.Segments. Das gibt ein Array zurück und "somepage.aspx" ist das letzte Element.
Anthony Pegram
1
Ich hasse es, wählerisch zu sein, aber sollte es nicht Index> = 0 sein?
Jenny O'Reilly
103

Alles vor dem ersten entfernen /

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

Alles nach dem ersten entfernen /

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

Alles vor dem letzten entfernen /

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

Alles nach dem letzten entfernen /

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

Eine noch einfachere Lösung zum Entfernen von Zeichen nach einem angegebenen Zeichen ist die Verwendung der String.Remove () -Methode wie folgt:

Alles nach dem ersten entfernen /

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

Alles nach dem letzten entfernen /

input = input.Remove(input.LastIndexOf("/") + 1);
ePandit
quelle
7
Beachten Sie, dass diese alle ein Beispiel auslösen, wenn die Zeichenfolge überhaupt kein "/" enthält. Dies ist natürlich kein Problem, wenn Sie wie in der ursprünglichen Frage mit fest codierten Zeichenfolgen arbeiten. In den meisten Fällen sollten Sie dies jedoch berücksichtigen.
Elezar
7

Hier ist eine weitere einfache Lösung. Der folgende Code gibt alles vor dem '|' zurück. Charakter:

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

Tatsächlich könnten Sie so viele Trennzeichen haben, wie Sie möchten, aber wenn Sie nur ein Trennzeichen haben, erhalten Sie nach dem '|' Folgendes:

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

(Alles, was ich im zweiten Code geändert habe, war der Index des Arrays.)

Joy Pinckard
quelle
6

Die Uri-Klasse ist im Allgemeinen die beste Wahl, um Urls zu manipulieren.

Ian Mercer
quelle
7
Ein Beispiel für einen Link wäre schön.
Trevor
1

Verwenden Sie unten, um alles vor einem bestimmten Zeichen zu entfernen.

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

Dies bedeutet, dass alles vor dem $ char genommen und entfernt wird. Wenn Sie nun die Elemente nach einem Charakter entfernen möchten, ändern Sie einfach die +1 in -1 und schon sind Sie fertig!

Aber für eine URL würde ich die eingebaute .NET-Klasse verwenden, um das zu übernehmen.

TGarrett
quelle
1

Request.QueryStringhilft Ihnen dabei, die parametersund Werte in dieURL

Beispiel

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

Daher sollte die Variable für den Benutzernamen gleich dave sein

Grüße

Dave
quelle
0

Ich zweiter Hightechrider: Es gibt bereits eine spezielle URL-Klasse für Sie.

Ich muss jedoch auch darauf hinweisen, dass das PHP replaceAll reguläre Ausdrücke für das Suchmuster verwendet, was Sie auch in .NET tun können - sehen Sie sich die RegEx-Klasse an.

Fjodor Soikin
quelle
0

Sie können die in .NET integrierte Methode verwenden, um die zu entfernen QueryString. dhRequest.QueryString.Remove["whatever"];

Hier ist alles in [] der Name desjenigen, den querystringSie entfernen möchten.

Versuchen Sie dies ... Ich hoffe, das wird helfen.

shary.sharath
quelle