Tôi có một chuỗi nói
"Hello! world!"
Tôi muốn làm một trim hoặc loại bỏ để đưa ra! tắt thế giới nhưng không tắt Hello.
Tôi có một chuỗi nói
"Hello! world!"
Tôi muốn làm một trim hoặc loại bỏ để đưa ra! tắt thế giới nhưng không tắt Hello.
Câu trả lời:
"Hello! world!".TrimEnd('!');
BIÊN TẬP:
Những gì tôi đã nhận thấy trong loại câu hỏi này mà mọi người khá gợi ý để loại bỏ char cuối cùng của chuỗi đã cho. Nhưng điều này không đáp ứng định nghĩa của phương pháp Trim.
Trim - Loại bỏ tất cả các lần xuất hiện của các ký tự khoảng trắng từ đầu và cuối của trường hợp này.
Theo định nghĩa này, chỉ loại bỏ ký tự cuối cùng khỏi chuỗi là giải pháp xấu.
Vì vậy, nếu chúng ta muốn "Cắt nhân vật cuối cùng khỏi chuỗi", chúng ta nên làm một cái gì đó như thế này
Ví dụ như phương thức mở rộng:
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]);
}
}
}
Lưu ý nếu bạn muốn xóa tất cả các ký tự có cùng giá trị, tức là (!!!!) phương thức trên sẽ xóa tất cả các tồn tại của '!' từ cuối chuỗi, nhưng nếu bạn muốn xóa chỉ ký tự cuối cùng, bạn nên sử dụng ký tự này:
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);
hoặc là
if (yourString.Length > 1)
withoutLast = yourString.TrimEnd().Substring(0, yourString.Length - 1);
... trong trường hợp bạn muốn xóa một ký tự không phải khoảng trắng từ cuối.
TrimEnd()
phương pháp và nếu có nó có thể khiến Substring(..)
cuộc gọi tiếp theo thất bại trên các chuỗi ngắn.
string s1 = "Hello! world!";
string s2 = s1.Trim('!');
Thử cái này:
return( (str).Remove(str.Length-1) );
bạn cũng có thể sử dụng cái này:
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);
}
}
Phiên bản sửa đổi một chút của @Damian Leszczyński - Vash sẽ đảm bảo rằng chỉ một nhân vật cụ thể sẽ bị xóa.
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);
}
}
Tôi đã chọn con đường viết một tiện ích mở rộng bằng TrimEnd chỉ vì tôi đã sử dụng nó nội tuyến và hài lòng với nó ... tức là:
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);
}
}
Đảm bảo bạn bao gồm không gian tên trong các lớp của mình bằng lớp tĩnh; P và cách sử dụng là:
string _ManagedLocationsOLAP = string.Empty;
_ManagedLocationsOLAP = _validManagedLocationIDs.RemoveLastChars(",");
Một ví dụ lớp Mở rộng để đơn giản hóa việc này: -
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;
}
Sử dụng
"!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)
Nếu bạn muốn xóa '!' ký tự từ một biểu thức cụ thể ("thế giới" trong trường hợp của bạn), sau đó bạn có thể sử dụng biểu thức chính quy này
string input = "Hello! world!";
string output = Regex.Replace(input, "(world)!", "$1", RegexOptions.Multiline | RegexOptions.Singleline);
// result: "Hello! world"
ký tự đặc biệt $ 1 chứa tất cả các biểu thức "thế giới" phù hợp và được sử dụng để thay thế "thế giới!" ban đầu biểu hiện