C#带字符串数组的TrimStart参数:TrimStart(params string[]trimstrimstrings)
我正在为C#带字符串数组的TrimStart参数:TrimStart(params string[]trimstrimstrings),c#,string,extension-methods,C#,String,Extension Methods,我正在为TrimStart(params String[]trimstrimstrings) 和接受字符串数组参数的TrimEnd(params string[]trimstrimstrings) 方法应该像默认的TrimStart(params char[]trimChars)和TrimEnd(params char[]trimChars)方法一样工作。即,目的是从trimStrings数组中修剪每个(完全匹配)字符串的所有匹配项 添加一个不区分大小写的修剪选项也很好 实施这种方法的最佳方式是
TrimStart(params String[]trimstrimstrings)
和接受字符串数组参数的TrimEnd(params string[]trimstrimstrings)
方法应该像默认的TrimStart(params char[]trimChars)
和TrimEnd(params char[]trimChars)
方法一样工作。即,目的是从trimStrings数组中修剪每个(完全匹配)字符串的所有匹配项
添加一个不区分大小写的修剪选项也很好
实施这种方法的最佳方式是什么?
请参阅下面的“我的尝试”。我的解决方案:
public static string TrimStart(this string target, StringComparison comparisonType, params string[] trimStrings)
{
string result = target;
if (trimStrings == null)
return result;
var _trimStrings = trimStrings.OrderByDescending(t => t.Length).ToList();
bool trimmed = false;
do
{
trimmed = false;
foreach (var trimString in _trimStrings)
{
while (result.StartsWith(trimString, comparisonType))
{
result = result.Substring(trimString.Length);
trimmed = true;
}
}
} while (trimmed);
return result;
}
public static string TrimEnd(this string target, StringComparison comparisonType, params string[] trimStrings)
{
string result = target;
if (trimStrings == null)
return result;
var _trimStrings = trimStrings.OrderByDescending(t => t.Length).ToList();
bool trimmed = false;
do
{
trimmed = false;
foreach (var trimString in _trimStrings)
{
while (result.EndsWith(trimString, comparisonType))
{
result = result.Substring(0, result.Length - trimString.Length);
trimmed = true;
}
}
} while (trimmed);
return result;
}
即使你的问题不是一个真正的问题,而是一个规范,我也尝试了一下 这是我的
TrimStart
,您可以自己编写trimsend
)
不是代码请求站点。你必须首先尝试实现它们。我想你正在寻找rentacoder.com。我在最后改变了问题。但是,如果你不尝试,这仍然不是一个好问题。你明白你真正想要的是什么吗?它到底应该如何工作?“trimmingDATA”的结果应该是什么?TrimStart(“trim”,“trimming”)?现在您已经展示了您的方法,它有什么问题?你应该提到这个问题。它是否像预期的那样工作,速度慢,不可读,你有什么问题吗?否则,这不是一个真正的问题,但可能是一个候选人。
public static string TrimStart(this string str, StringComparison comparison = StringComparison.CurrentCulture, params string[] trimStrings)
{
if (str == null) return null;
// Check the longest strings first and check only relevant strings
List<string> orderedTrimStrings = trimStrings
.Where(ts => !String.IsNullOrEmpty(ts) && ts.Length <= str.Length)
.OrderByDescending(ts => ts.Length)
.ToList();
int minLength = orderedTrimStrings.Last().Length;
for (int i = 0; i + minLength <= str.Length;)
{
string longestTrim = orderedTrimStrings
.Where(ts => i + ts.Length <= str.Length)
.FirstOrDefault(ts => str.Substring(i, ts.Length).Equals(ts, comparison));
if (longestTrim == null)
return str.Substring(i);
else
i += longestTrim.Length;
}
return "";
}
string hw = "Hello World";
hw = hw.TrimStart(StringComparison.CurrentCultureIgnoreCase, "hello", " ");
// "World"