Hapus karakter setelah karakter tertentu dalam string, lalu hapus substring?

140

Saya merasa agak bodoh memposting ini ketika ini sepertinya sederhana dan ada banyak pertanyaan tentang string / karakter / regex, tetapi saya tidak dapat menemukan apa yang saya butuhkan (kecuali dalam bahasa lain: Hapus Semua Teks Setelah Titik Tertentu ).

Saya mendapat kode berikut:

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

Saya mencoba solusi dalam pertanyaan di atas (berharap sintaksnya akan sama!) Tetapi tidak. Saya ingin terlebih dahulu menghapus queryString yang bisa berupa panjang variabel apa pun, lalu hapus nama halaman, yang lagi-lagi bisa berapa pun panjangnya.

Bagaimana saya bisa menghapus string kueri dari URL lengkap sehingga tes ini lolos?

SventoryMang
sumber

Jawaban:

264

Untuk manipulasi string, jika Anda hanya ingin membunuh semuanya setelah?, Anda dapat melakukan ini

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

Sunting: Jika semuanya setelah slash terakhir, lakukan sesuatu seperti

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

Bergantian, karena Anda bekerja dengan URL, Anda dapat melakukan sesuatu dengan itu seperti kode ini

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
sumber
1
Atau apakah itu yang terakhir /?
Charlie Garts
4
Oh, ya, baca kembali itu. Dia dapat melakukan LastIndexOf ("/") dalam kasus itu.
Anthony Pegram
1
Terima kasih x2 karena menyediakan dua cara untuk melakukan ini!
SventoryMang
1
@gsvirdi, dalam hal ini, Anda dapat memuat URL itu ke Uri uri, dan kemudian mengakses uri.Segments. Itu akan mengembalikan array, dan "somepage.aspx" akan menjadi item terakhir.
Anthony Pegram
1
Saya benci pilih-pilih, tetapi bukankah seharusnya indeks> = 0?
Jenny O'Reilly
103

Untuk menghapus semuanya sebelum yang pertama /

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

Untuk menghapus semuanya setelah yang pertama /

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

Untuk menghapus semuanya sebelum yang terakhir /

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

Untuk menghapus semuanya setelah yang terakhir /

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

Solusi yang bahkan lebih sederhana untuk menghapus karakter setelah karakter yang ditentukan adalah dengan menggunakan metode String.Remove () sebagai berikut:

Untuk menghapus semuanya setelah yang pertama /

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

Untuk menghapus semuanya setelah yang terakhir /

input = input.Remove(input.LastIndexOf("/") + 1);
ePandit
sumber
7
Ketahuilah bahwa ini semua akan memberikan contoh jika string tidak mengandung "/" sama sekali. Jelas ini tidak akan menjadi masalah jika Anda bekerja dengan string yang dikodekan seperti pada pertanyaan awal, tetapi dalam kebanyakan kasus, Anda ingin mempertimbangkannya.
Elezar
7

Ini solusi sederhana lain. Kode berikut akan mengembalikan semuanya sebelum '|' karakter:

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

Sebenarnya, Anda dapat memiliki separator sebanyak yang Anda inginkan, tetapi dengan asumsi Anda hanya memiliki satu karakter pemisahan, berikut adalah cara Anda mendapatkan semuanya setelah '|':

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

(Yang saya ubah di bagian kedua kode adalah indeks array.)

Joy Pinckard
sumber
6

Kelas Uri umumnya merupakan taruhan terbaik Anda untuk memanipulasi URL.

Ian Mercer
sumber
7
Contoh tautan akan menyenangkan.
Trevor
1

Untuk menghapus semuanya sebelum karakter tertentu, gunakan di bawah ini.

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

Apa yang dilakukan adalah, mengambil semuanya sebelum $ char dan menghapusnya. Sekarang jika Anda ingin menghapus item setelah karakter, cukup ganti +1 ke -1 dan Anda sudah siap!

Tetapi untuk URL, saya akan menggunakan kelas .NET bawaan untuk mengambilnya.

TGarrett
sumber
1

Request.QueryStringmembantu Anda untuk mendapatkan parametersdan nilai - nilai yang disertakan dalamURL

contoh

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

jadi variabel customername harus sama dengan dave

salam

dave
sumber
0

Saya Hightechrider kedua: ada kelas Url khusus yang sudah dibangun untuk Anda.

Saya juga harus menunjukkan, bahwa replaceAll PHP menggunakan ekspresi reguler untuk pola pencarian, yang dapat Anda lakukan dalam. NET juga - lihat kelas RegEx.

Fyodor Soikin
sumber
0

Anda dapat menggunakan .NET's built in method untuk menghapus QueryString. yaitu,Request.QueryString.Remove["whatever"];

di sini, apa pun dalam [] adalah nama querystringyang ingin Anda hapus.

Coba ini ... Saya harap ini akan membantu.

shary.sharath
sumber