ฉันมีสายพูด
"Hello! world!"
ฉันต้องการจะตัดหรือลบเพื่อนำออก! ออกจากโลก แต่ไม่ได้ปิดสวัสดี
ฉันมีสายพูด
"Hello! world!"
ฉันต้องการจะตัดหรือลบเพื่อนำออก! ออกจากโลก แต่ไม่ได้ปิดสวัสดี
คำตอบ:
"Hello! world!".TrimEnd('!');
แก้ไข:
สิ่งที่ฉันสังเกตเห็นในคำถามประเภทนี้ที่ทุกคนแนะนำให้ลบอักขระสุดท้ายของสตริงที่กำหนด แต่นี่ไม่เป็นไปตามคำนิยามของวิธีการ Trim
ตัดแต่ง - ลบอักขระช่องว่างที่เกิดขึ้นทั้งหมดจากจุดเริ่มต้นและจุดสิ้นสุดของอินสแตนซ์นี้
ภายใต้ข้อกำหนดนี้การลบเฉพาะอักขระตัวสุดท้ายออกจากสตริงเป็นการแก้ปัญหาที่ไม่ดี
ดังนั้นถ้าเราต้องการ "ตัดตัวอักขระสุดท้ายจากสตริง" เราควรทำอะไรแบบนี้
ตัวอย่างเช่นวิธีการขยาย:
public static class MyExtensions
{
public static string TrimLastCharacter(this String str)
{
if(String.IsNullOrEmpty(str)){
return str;
} else {
return str.TrimEnd(str[str.Length - 1]);
}
}
}
หมายเหตุหากคุณต้องการลบตัวละครทั้งหมดที่มีค่าเดียวกันนั่นคือ (!!!!) วิธีการข้างต้นจะลบการมีอยู่ทั้งหมดของ '! จากจุดสิ้นสุดของสตริง แต่ถ้าคุณต้องการลบเฉพาะอักขระตัวสุดท้ายคุณควรใช้:
else { return str.Remove(str.Length - 1); }
String withoutLast = yourString.Substring(0,(yourString.Length - 1));
if (yourString.Length > 1)
withoutLast = yourString.Substring(0, yourString.Length - 1);
หรือ
if (yourString.Length > 1)
withoutLast = yourString.TrimEnd().Substring(0, yourString.Length - 1);
... ในกรณีที่คุณต้องการลบอักขระที่ไม่ใช่ช่องว่างออกจากท้ายที่สุด
TrimEnd()วิธีการและหากมีก็อาจทำให้การSubstring(..)โทรที่ตามมาล้มเหลวในสตริงสั้น ๆ
string s1 = "Hello! world!";
string s2 = s1.Trim('!');
ลองสิ่งนี้:
return( (str).Remove(str.Length-1) );
string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));
อีกตัวอย่างของการตัดแต่งอักขระตัวสุดท้ายจากสตริง:
string outputText = inputText.Remove(inputText.Length - 1, 1);
คุณสามารถใส่มันลงในวิธีการขยายและป้องกันมันจากสตริงโมฆะ ฯลฯ
string s1 = "Hello! world!"
string s2 = s1.Substring(0, s1.Length - 1);
Console.WriteLine(s1);
Console.WriteLine(s2);
คุณสามารถใช้สิ่งนี้:
public static class Extensions
{
public static string RemovePrefix(this string o, string prefix)
{
if (prefix == null) return o;
return !o.StartsWith(prefix) ? o : o.Remove(0, prefix.Length);
}
public static string RemoveSuffix(this string o, string suffix)
{
if(suffix == null) return o;
return !o.EndsWith(suffix) ? o : o.Remove(o.Length - suffix.Length, suffix.Length);
}
}
ง่ายและง่ายมาก:
str = str.Remove (str.Length - 1);
@Damian Leszczyńskiเวอร์ชั่นที่ได้รับการแก้ไขเล็กน้อย - Vash ที่จะทำให้แน่ใจว่าจะมีการลบเฉพาะอักขระที่เฉพาะเจาะจง
public static class StringExtensions
{
public static string TrimLastCharacter(this string str, char character)
{
if (string.IsNullOrEmpty(str) || str[str.Length - 1] != character)
{
return str;
}
return str.Substring(0, str.Length - 1);
}
}
ฉันใช้เส้นทางของการเขียนส่วนขยายโดยใช้ TrimEnd เพียงเพราะฉันใช้มันแบบอินไลน์และมีความสุขกับมัน ... เช่น:
static class Extensions
{
public static string RemoveLastChars(this String text, string suffix)
{
char[] trailingChars = suffix.ToCharArray();
if (suffix == null) return text;
return text.TrimEnd(trailingChars);
}
}
ตรวจสอบให้แน่ใจว่าคุณรวมเนมสเปซในคลาสของคุณโดยใช้คลาสแบบคงที่ P และการใช้งานคือ:
string _ManagedLocationsOLAP = string.Empty;
_ManagedLocationsOLAP = _validManagedLocationIDs.RemoveLastChars(",");
ตัวอย่างส่วนขยายคลาสเพื่อทำให้สิ่งนี้ง่ายขึ้น: -
internal static class String
{
public static string TrimEndsCharacter(this string target, char character) => target?.TrimLeadingCharacter(character).TrimTrailingCharacter(character);
public static string TrimLeadingCharacter(this string target, char character) => Match(target?.Substring(0, 1), character) ? target.Remove(0,1) : target;
public static string TrimTrailingCharacter(this string target, char character) => Match(target?.Substring(target.Length - 1, 1), character) ? target.Substring(0, target.Length - 1) : target;
private static bool Match(string value, char character) => !string.IsNullOrEmpty(value) && value[0] == character;
}
การใช้
"!Something!".TrimLeadingCharacter('X'); // Result '!Something!' (No Change)
"!Something!".TrimTrailingCharacter('S'); // Result '!Something!' (No Change)
"!Something!".TrimEndsCharacter('g'); // Result '!Something!' (No Change)
"!Something!".TrimLeadingCharacter('!'); // Result 'Something!' (1st Character removed)
"!Something!".TrimTrailingCharacter('!'); // Result '!Something' (Last Character removed)
"!Something!".TrimEndsCharacter('!'); // Result 'Something' (End Characters removed)
"!!Something!!".TrimLeadingCharacter('!'); // Result '!Something!!' (Only 1st instance removed)
"!!Something!!".TrimTrailingCharacter('!'); // Result '!!Something!' (Only Last instance removed)
"!!Something!!".TrimEndsCharacter('!'); // Result '!Something!' (Only End instances removed)
หากคุณต้องการลบ '!' อักขระจากนิพจน์เฉพาะ ("โลก" ในกรณีของคุณ) จากนั้นคุณสามารถใช้นิพจน์ทั่วไปนี้
string input = "Hello! world!";
string output = Regex.Replace(input, "(world)!", "$1", RegexOptions.Multiline | RegexOptions.Singleline);
// result: "Hello! world"
อักขระพิเศษ $ 1 ประกอบด้วยนิพจน์ "โลก" ที่ตรงกันทั้งหมดและใช้เพื่อแทนที่ "โลก!" ดั้งเดิม การแสดงออก