ลบอักขระหลังจากอักขระในสตริงแล้วลบสตริงย่อยหรือไม่


140

ฉันรู้สึกโง่ที่โพสต์สิ่งนี้เมื่อดูเหมือนง่ายและมีคำถามมากมายเกี่ยวกับสตริง / ตัวอักษร / regex แต่ฉันไม่สามารถหาสิ่งที่ฉันต้องการได้ (ยกเว้นในภาษาอื่น: ลบข้อความทั้งหมดหลังจากจุดแน่นอน )

ฉันได้รับรหัสต่อไปนี้:

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

ฉันลองวิธีแก้ปัญหาในคำถามข้างต้น (หวังว่าไวยากรณ์จะเหมือนเดิม!) แต่ไม่ ฉันต้องการลบ queryString ก่อนซึ่งอาจเป็นความยาวตัวแปรใด ๆ จากนั้นลบชื่อหน้าซึ่งอาจมีความยาวได้อีกครั้ง

ฉันจะขอลบข้อความค้นหาออกจาก URL แบบเต็มที่การทดสอบนี้ผ่านได้อย่างไร

คำตอบ:


265

สำหรับการจัดการสตริงหากคุณต้องการฆ่าทุกอย่างหลังจาก? คุณสามารถทำได้

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

แก้ไข: หากทุกอย่างหลังจากสแลชสุดท้ายให้ทำสิ่งที่ต้องการ

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

อีกทางเลือกหนึ่งเนื่องจากคุณทำงานกับ URL คุณสามารถทำบางสิ่งได้เช่นเดียวกับรหัสนี้

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

1
หรือมันจะเป็นครั้งสุดท้าย/?
Charlie Salts

4
โอ้ใช่อ่านอีกครั้ง เขาสามารถทำ LastIndexOf ("/") ในกรณีนั้น
Anthony Pegram

1
ขอบคุณ x2 ที่ให้วิธีสองอย่างนี้!
SventoryMang

1
@gsvirdi ในกรณีที่คุณอาจโหลด URL ที่เป็นแล้วการเข้าถึงUri uri uri.Segmentsนั่นจะส่งคืนอาร์เรย์และ "somepage.aspx" จะเป็นรายการสุดท้าย
Anthony Pegram

1
ฉันเกลียดที่จะจู้จี้จุกจิก แต่ไม่ควรเป็นดัชนี> = 0?
Jenny O'Reilly

103

เพื่อลบทุกอย่างออกก่อน /

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

เพื่อลบทุกอย่างหลังจากแรก /

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

เพื่อลบทุกอย่างก่อนที่จะล่าสุด /

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

เพื่อลบทุกอย่างหลังจากที่ผ่านมา /

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

วิธีที่ง่ายกว่าสำหรับการลบอักขระหลังจากอักขระที่ระบุคือการใช้เมธอด String.Remove ()ดังนี้:

เพื่อลบทุกอย่างหลังจากแรก /

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

เพื่อลบทุกอย่างหลังจากที่ผ่านมา /

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

7
โปรดทราบว่าสิ่งเหล่านี้จะแสดงตัวอย่างหากสตริงไม่มี "/" เลย เห็นได้ชัดว่านี่จะไม่เป็นปัญหาหากคุณทำงานกับสายอักขระที่มีการกำหนดรหัสยากเหมือนในคำถามเดิม แต่โดยส่วนใหญ่คุณจะต้องคำนึงถึงสิ่งนั้นด้วย
Elezar

7

นี่เป็นอีกวิธีง่ายๆ รหัสต่อไปนี้จะคืนค่าทุกอย่างก่อน '|' ตัวอักษร:

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

ในความเป็นจริงคุณสามารถมีตัวคั่นได้มากเท่าที่คุณต้องการ แต่สมมติว่าคุณมีตัวคั่นเพียงตัวเดียวนี่คือวิธีที่คุณจะได้รับทุกอย่างหลังจาก '|':

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

(สิ่งที่ฉันเปลี่ยนไปในโค้ดส่วนที่สองคือดัชนีของอาร์เรย์)



1

ในการลบทุกอย่างก่อนที่ถ่านชนิดพิเศษให้ใช้ด้านล่าง

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

สิ่งนี้ทำคือใช้ทุกอย่างก่อน $ char และลบออก ตอนนี้ถ้าคุณต้องการที่จะลบรายการหลังจากตัวละครเพียงแค่เปลี่ยน +1 เป็น -1 และคุณจะถูกตั้งค่า!

แต่สำหรับ URL ฉันจะใช้ built in .NET class เพื่อรับสิ่งนั้น


1

Request.QueryStringช่วยให้คุณได้รับparametersและค่ารวมอยู่ในURL

ตัวอย่าง

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

ดังนั้นตัวแปรที่กำหนดเองควรจะเท่ากับเดฟ

ความนับถือ


0

ฉันสอง Hightechrider: มีคลาส Url พิเศษที่สร้างขึ้นสำหรับคุณแล้ว

ฉันต้องชี้ให้เห็นว่าอย่างไรก็ตาม replaceAll ของ PHP ใช้นิพจน์ทั่วไปสำหรับรูปแบบการค้นหาซึ่งคุณสามารถทำได้ใน. NET เช่นกัน - ดูที่คลาส RegEx


0

คุณสามารถใช้ .NET QueryStringสร้างขึ้นในวิธีการที่จะเอา กล่าวคือRequest.QueryString.Remove["whatever"];

ที่นี่สิ่งที่อยู่ใน [] คือชื่อของquerystringที่คุณต้องการที่จะลบ

ลองนี้ ... ฉันหวังว่ามันจะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.