我正在尝试检查字符串中的第一个字母是否为l,l可以是大写或小写,如果是l我想从字符串中修剪它并且我当前正在使用此代码来执行此操作
String firstLetter = result.Text[0].ToString();
if (result.Text.Length == 18)
{
if (firstLetter.Equals("l".ToString()) || firstLetter.Equals("L".ToString()))
{
result.Text.Remove(0, 1);
}
if (firstLetter == "l" || firstLetter == "L" || firstLetter == "1")
{
result.Text.Remove(0, 1);
}
if (result.Text.StartsWith("l".ToString()) || result.Text.ToUpper().StartsWith("L".ToString()))
{
result.Text.Remove(0, 1);
}
}
这些if语句都不起作用,它们完全被忽略了,为什么它们不起作用?
答案 0 :(得分:5)
您需要做的就是:
result = result.TrimStart({'L', 'l'});
这将采取“Llama”并使其成为“ama”。如果您尝试使用“Llama”并获得“lama”,请使用以下代码:
result = result.ToUpper().StartsWith("L") ? result.Remove(0,1) : result;
答案 1 :(得分:2)
如果您的.Text []不完全是18,那么它就不会进入那里。
一旦你从文本中得到任何结果就可以了。
if (firstLetter.Substring(0, 1).ToUpper() == "L")
{
// equals l so lets remove it
firstLetter = firstLetter.Remove(0, 1);
}
答案 2 :(得分:1)
你应该试试这个:
bool isFirstL = firstLetter.Substring(0, 1).ToUpper().Equals("L");
你可以按照你想要的方式使用这个表达式,而不是为bool指定值。
顺便说一句。你有一行if (result.Text.Length == 18)
你的字符串真的包含18个字符吗?
答案 3 :(得分:1)
我必须这样做:
result = result.TrimStart(new char[] {'L', 'l'});
答案 4 :(得分:1)
在C#中,字符串类型设计为不可变的,这意味着您无法更改字符串实例。这来自documentation of the Remove method,强调我的:
返回一个新字符串,其中当前实例中从指定位置开始的指定数量的字符已被删除。
因此,要实际看到调用Remove的结果,您必须将其分配给某些内容,例如:
result.Text = result.Text.Remove(0, 1);
要查看字符串是否以L开头,最简洁的方法是使用StartsWith。整个代码都是这样的:
if (result.Text.Length == 18 &&
result.Text.StartsWith("L", StringComparison.OrdinalIgnoreCase))
{
result.Text = result.Text.Remove(0, 1);
}
答案 5 :(得分:1)
只需使用string.IndexOf
,其中包含IgnoreCase
参数,例如:
string firstLetter = "LlSomething";
if (firstLetter.IndexOf("l", StringComparison.InvariantCultureIgnoreCase) == 0
&& firstLetter.Length > 0)
{
firstLetter = firstLetter.Substring(1);
}
您将获得lSomething
作为输出。