【问题标题】:Remove characters before character "."删除字符“.”之前的字符
【发布时间】:2010-06-02 15:52:17
【问题描述】:

如何有效地删除字符串中位于字符“.”之前的所有字符?

输入: 美国.美国

输出: 美国

【问题讨论】:

  • 是否总是只有一个时期?

标签: c#


【解决方案1】:

您可以像这样使用IndexOf methodSubstring method

string output = input.Substring(input.IndexOf('.') + 1);

上面没有错误处理,所以如果输入字符串中不存在句点,就会出现问题。

【讨论】:

  • @casperOne 实际上,如果未找到,IndexOf 不会返回 -1,并且字符串是从零开始的子字符串引用,所以从技术上讲,如果没有句点,它将返回整个字符串,对吧?我认为只要字符串不为空就足够了。
  • @drachenstern:如果未找到,IndexOf 将返回 -1,如果将其传递给 Substring,则会抛出 ArgumentOutOfRangeException。
  • @casperOne ~ 啧啧啧,它的 -1 + 1 ... 所以它总是为零或更多。你的代码不是我的;)
  • @drachenstern:呃,是的,正确的。在这种情况下,它将为您提供整个字符串。
  • @drachenstern:是的,但如果你不小心,它会咬你。好收获!
【解决方案2】:

你可以试试这个:

string input = "lala.bla";
output = input.Split('.').Last();

【讨论】:

  • 如果有多个 1 期间,您将遇到问题。
  • @MikeCole 为什么? .Last() 将确保您在一段时间后得到最后一个单词
  • @CaioProiete 因为 OP 要求在我们假设给定字符串中只有一个句点的句点之前删除字符。鉴于这个假设,答案是正确的。否则它是模棱两可的。
  • string[]' 不包含“Last”的定义
  • @Ruben9922 OP 似乎想要捕获 C 而不是 B.C 给出他的问题和示例。似乎他有一个由点分隔的层次结构。您作为层次结构的A.B.C 示例类似于PlanetEarth.America.USA。他可能仍想捕获层次结构中的最后一项:USA
【解决方案3】:
string input = "America.USA"
string output = input.Substring(input.IndexOf('.') + 1);

【讨论】:

    【解决方案4】:
    String input = ....;
    int index = input.IndexOf('.');
    if(index >= 0)
    {
        return input.Substring(index + 1);
    }
    

    这将返回新单词。

    【讨论】:

      【解决方案5】:
      public string RemoveCharactersBeforeDot(string s)
      {
       string splitted=s.Split('.');
       return splitted[splitted.Length-1]
      }
      

      【讨论】:

      • 旁注:这会导致保留虚线字符串的两个(或全部)部分,如果您需要所有这些部分,这是可取的,但如果您只需要最后一个,则不需要。
      【解决方案6】:

      如果 char 不存在,则返回原始字符串的几个方法。

      这个在第一次出现枢轴后切断字符串:

      public static string truncateStringAfterChar(string input, char pivot){         
          int index = input.IndexOf(pivot);   
          if(index >= 0) {
              return input.Substring(index + 1);          
          }           
          return input;       
      }
      

      这个是在最后一次出现枢轴之后切断字符串:

      public static string truncateStringAfterLastChar(string input, char pivot){         
          return input.Split(pivot).Last();   
      }
      

      【讨论】:

        【解决方案7】:

        我常用来解决这个问题的扩展方法:

        public static string RemoveAfter(this string value, string character)
            {
                int index = value.IndexOf(character);
                if (index > 0)
                {
                    value = value.Substring(0, index);
                }
                return value;
            }
        
            public static string RemoveBefore(this string value, string character)
            {
                int index = value.IndexOf(character);
                if (index > 0)
                {
                    value = value.Substring(index + 1);
                }
                return value;
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-29
          • 1970-01-01
          • 1970-01-01
          • 2014-07-17
          • 2016-08-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多