【问题标题】:Check for specific letter in string检查字符串中的特定字母
【发布时间】:2013-10-19 23:44:23
【问题描述】:

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

【问题讨论】:

  • 第一个条件(result.Text.Length == 18)被跳过了吗?
  • 结果是什么对象?是文本框吗?
  • @H.Moody 这不正确。使用等于 == 运算符比较字符串不会按引用进行比较。
  • @H.Moody 实际上在 C# 中== 被重载为Equals()
  • @TrevorElliott 对不起哥们,我忘了那不是 Java :-

标签: c# .net string if-statement boolean


【解决方案1】:

您需要做的就是:

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

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

result = result.ToUpper().StartsWith("L") ? result.Remove(0,1) : result;

【讨论】:

  • 这不会修剪角色的所有实例,而不仅仅是第一个吗?
  • @TrevorElliott - 不,它只会从字符串的开头修剪它,这是他想要的(查看他的.Remove(0,1) 声明)
  • 来自 MSDN:“从当前 String 对象中删除数组中指定的一组字符的所有前导匹配项。”
  • @TrevorElliott -- 关键字“领先”..仅出现领先
  • 我假设如果“LLsomething”中有两个 L,他希望它以“Lsomething”的形式出现,但我想这由他来确认。
【解决方案2】:

你应该试试这个:

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

你可以按照你想要的方式使用这个表达式,而不是为 bool 赋值。

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

【讨论】:

  • 这是一个检查,字符串应该只有 17,但有时会添加一个 l 使其成为 18,这就是我要删除它的原因
【解决方案3】:

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

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

if (firstLetter.Substring(0, 1).ToUpper() == "L")
        {
            // equals l so lets remove it
            firstLetter = firstLetter.Remove(0, 1);
        }

【讨论】:

    【解决方案4】:

    我必须这样做:

    result = result.TrimStart(new char[] {'L', 'l'});
    

    【讨论】:

      【解决方案5】:

      在 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);
      }
      

      【讨论】:

        【解决方案6】:

        只需使用string.IndexOf,它带有IgnoreCase参数,如:

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

        你会得到lSomething 作为输出。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-12-18
          • 1970-01-01
          • 2011-08-16
          • 2021-06-17
          • 1970-01-01
          • 2017-09-25
          相关资源
          最近更新 更多