Xóa ký tự sau ký tự cụ thể trong chuỗi, sau đó xóa chuỗi con?


140

Tôi cảm thấy hơi ngu ngốc khi đăng bài này khi điều này có vẻ đơn giản và có hàng tấn câu hỏi về chuỗi / ký tự / regex, nhưng tôi không thể tìm thấy những gì tôi cần (ngoại trừ trong ngôn ngữ khác: Xóa tất cả văn bản sau một số điểm nhất định ).

Tôi đã nhận được mã sau đây:

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

Tôi đã thử giải pháp trong câu hỏi trên (hy vọng cú pháp sẽ giống nhau!) Nhưng không. Trước tiên tôi muốn xóa queryString có thể là bất kỳ độ dài biến nào, sau đó xóa tên trang, một lần nữa có thể là bất kỳ độ dài nào.

Làm cách nào tôi có thể xóa chuỗi truy vấn khỏi URL đầy đủ để kiểm tra này vượt qua?

Câu trả lời:


264

Đối với thao tác chuỗi, nếu bạn chỉ muốn giết mọi thứ sau dấu?, Bạn có thể làm điều này

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

Chỉnh sửa: Nếu mọi thứ sau dấu gạch chéo cuối cùng, hãy làm một cái gì đó như

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

Luân phiên, vì bạn đang làm việc với một URL, bạn có thể làm gì đó với nó như mã này

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

1
Hay nó sẽ là cuối cùng /?
Charlie Salts

4
Ồ, vâng, đọc lại mà. Anh ta có thể thực hiện Last IndexOf ("/") trong trường hợp đó.
Anthony Pegram

1
Cảm ơn x2 đã cung cấp hai cách để làm điều này!
SventoryMang

1
@gsvirdi, trong trường hợp đó, bạn có thể tải URL đó vào Uri uri, sau đó truy cập uri.Segments. Điều đó sẽ trả về một mảng và "somepage.aspx" sẽ là mục cuối cùng.
Anthony Pegram

1
Tôi ghét phải kén chọn, nhưng không nên là chỉ số> = 0?
Jenny O'Reilly

103

Để loại bỏ mọi thứ trước khi đầu tiên /

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

Để loại bỏ mọi thứ sau lần đầu tiên /

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

Để xóa mọi thứ trước khi cuối cùng /

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

Để loại bỏ mọi thứ sau cùng /

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

Một giải pháp đơn giản hơn nữa để loại bỏ các ký tự sau một char được chỉ định là sử dụng phương thức String.Remove () như sau:

Để loại bỏ mọi thứ sau lần đầu tiên /

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

Để loại bỏ mọi thứ sau cùng /

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

7
Xin lưu ý rằng tất cả những thứ này sẽ đưa ra một ví dụ nếu chuỗi không chứa "/" nào cả. Rõ ràng điều này sẽ không thành vấn đề nếu bạn làm việc với các chuỗi được mã hóa cứng như trong câu hỏi ban đầu, nhưng trong hầu hết các trường hợp, bạn sẽ muốn xem xét điều đó.
Elezar

7

Đây là một giải pháp đơn giản. Đoạn mã sau sẽ trả về mọi thứ trước dấu '|' tính cách:

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

Trên thực tế, bạn có thể có nhiều dấu phân cách như bạn muốn, nhưng giả sử bạn chỉ có một ký tự phân tách, đây là cách bạn sẽ có được mọi thứ sau '|':

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

(Tất cả tôi đã thay đổi trong đoạn mã thứ hai là chỉ mục của mảng.)


6

Lớp Uri nói chung là đặt cược tốt nhất của bạn để thao túng các Url.


7
Một ví dụ về liên kết sẽ tốt đẹp.
Trevor

1

Để loại bỏ mọi thứ trước một char cụ thể, sử dụng dưới đây.

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

Điều này làm là, lấy mọi thứ trước $ char và xóa nó. Bây giờ nếu bạn muốn xóa các mục sau một ký tự, chỉ cần thay đổi +1 thành -1 và bạn đã được đặt!

Nhưng đối với một URL, tôi sẽ sử dụng lớp .NET tích hợp để thực hiện điều đó.


1

Request.QueryStringgiúp bạn có được parametersvà các giá trị được bao gồm trongURL

thí dụ

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

vì vậy biến tên người dùng phải bằng dave

Trân trọng


0

Tôi thứ hai Hightechrider: có một lớp Url chuyên biệt đã được xây dựng cho bạn.

Tuy nhiên, tôi cũng phải chỉ ra rằng thay thế của PHP sử dụng các biểu thức chính quy cho mẫu tìm kiếm, điều mà bạn có thể làm trong .NET - nhìn vào lớp RegEx.


0

bạn có thể sử dụng phương thức dựng sẵn của .NET để loại bỏ QueryString. I E,Request.QueryString.Remove["whatever"];

ở đây bất cứ điều gì trong [] là tên của cái querystringmà bạn muốn xóa.

Hãy thử điều này ... Tôi hy vọng điều này sẽ giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.