0

我正在尝试检查字符串中的第一个字母是否是 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 语句都不起作用,它们被完全跳过,为什么它们不起作用?

4

6 回答 6

5

您需要做的就是:

result = result.TrimStart({'L', 'l'});

这将采用“Llama”并将其设为“ama”。如果您尝试服用“Llama”并获得“lama”,请使用以下代码:

result = result.ToUpper().StartsWith("L") ? result.Remove(0,1) : result;
于 2013-10-11T19:34:13.797 回答
2

如果您的 .Text[] 不是精确的 18,那么它就不会进入那里。

一旦你从你的结果中得到文本,就这样做。

if (firstLetter.Substring(0, 1).ToUpper() == "L")
        {
            // equals l so lets remove it
            firstLetter = firstLetter.Remove(0, 1);
        }
于 2013-10-11T19:42:41.607 回答
1

只需使用string.IndexOf,它需要IgnoreCase参数,例如:

string firstLetter = "LlSomething";
if (firstLetter.IndexOf("l", StringComparison.InvariantCultureIgnoreCase) == 0 
        && firstLetter.Length > 0)
{
    firstLetter = firstLetter.Substring(1);
}

你会得到lSomething作为输出。

于 2013-10-11T19:46:55.693 回答
1

你应该试试这个:

bool isFirstL = firstLetter.Substring(0, 1).ToUpper().Equals("L");

并且您可以以您想要的方式使用此表达式,而不是为 bool 赋值。

顺便提一句。你有行if (result.Text.Length == 18)你的字符串真的包含 18 个字符吗?

于 2013-10-11T19:42:21.380 回答
1

我必须做:

result = result.TrimStart(new char[] {'L', 'l'});
于 2013-10-11T19:43:25.157 回答
1

在 C# 中,字符串类型被设计为不可变的,这意味着您不能更改字符串实例。这是来自Remove 方法的文档,强调我的:

返回一个新字符串,其中删除了当前实例中从指定位置开始的指定数量的字符。

因此,要实际查看调用 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);
}
于 2013-10-11T19:43:43.913 回答