【问题标题】:get all characters to right of last dash获取最后一个破折号右侧的所有字符
【发布时间】:2011-03-16 15:24:48
【问题描述】:

我有以下几点:

string test = "9586-202-10072"

如何将所有字符都放在最后一个 - 的右侧,所以 10072。最后一个破折号右侧的字符数总是不同的。

如何做到这一点?

【问题讨论】:

    标签: c#


    【解决方案1】:

    您可以通过str.LastIndexOf('-') 获得最后一个- 的位置。所以下一步很明显:

    var result = str.Substring(str.LastIndexOf('-') + 1);
    

    更正

    正如 Brian 下面所说,在没有破折号的字符串上使用 this 将导致返回原始字符串。

    【讨论】:

    • 即使连字符是最后一个字符也可以使用,在这种情况下,它会正确返回一个空字符串。仅当 str 为 null 或根本不包含连字符时,此操作才会失败。 (在没有连字符的情况下,它不会抛出;它会返回整个源字符串。)
    • @LukeH:感谢您的提醒。我没有检查并错误地认为它会抛出。
    • 好吧,如果没有找到,LastIndexOf 返回 -1(这是记录在案的行为,因此可以安全地依赖它)。 str.Substring(1-1) 给你一个等于str 的字符串。没有惊喜,在这里。
    • @Brian:我想我在同一个微不足道的陈述中打破了我的大多数错误记录。教训:不要在事后不校对代码的情况下写任何东西。谢谢。
    【解决方案2】:

    您可以使用 LINQ,并为自己节省显式解析:

    string test = "9586-202-10072";
    string lastFragment = test.Split('-').Last();
    
    Console.WriteLine(lastFragment);
    

    【讨论】:

    • 这可能会节省大部分开发人员的时间,但在一般情况下,请注意,这样的代码会分配许多字符串(在上面的示例中可能是四个),因此在性能关键部分可能会不那么强调。
    【解决方案3】:

    我可以看到这篇文章被浏览了超过 46,000 次。我敢打赌,46,000 名观众中的许多人都在问这个问题,仅仅是因为他们只想要文件名......如果你不能使用 at 符号逐字显示子字符串,那么这些答案可能是一个兔子洞。

    如果您只是想获取文件名,那么这里应该提到一个简单的答案。即使这不是问题的准确答案。

    result = Path.GetFileName(fileName);
    

    https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx

    【讨论】:

      【解决方案4】:
      string tail = test.Substring(test.LastIndexOf('-') + 1);
      

      【讨论】:

        【解决方案5】:
        YourString.Substring(YourString.LastIndexOf("-"));
        

        【讨论】:

        • 如果在末尾排除“+ 1”,则输出将包含特殊字符以及字符串。
        【解决方案6】:
        string atest = "9586-202-10072";
        int indexOfHyphen = atest.LastIndexOf("-");
        
        if (indexOfHyphen >= 0)
        {
            string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
            Console.WriteLine(contentAfterLastHyphen );
        }
        

        【讨论】:

          【解决方案7】:

          【讨论】:

            【解决方案8】:

            我为此创建了一个字符串扩展名,希望对您有所帮助。

            public static string GetStringAfterChar(this string value, char substring)
                {
                    if (!string.IsNullOrWhiteSpace(value))
                    {
                        var index = value.LastIndexOf(substring);
                        return index > 0 ? value.Substring(index + 1) : value;
                    }
            
                    return string.Empty;
                }
            

            【讨论】:

              【解决方案9】:
              test.Substring[(test.LastIndexOf('-') + 1)..]
              

              C# 8(2019 年末)引入了 range 运算符并进一步简化了它。这里的两个点表示从索引(含)到字符串的结尾。

              【讨论】:

              • 在 VS 建议我进行此重构之后,我正要发布相同的内容以获得简单的声誉。但你是第一个;给你,点赞。 :P
              【解决方案10】:

              test.Substring(test.LastIndexOf("-"))

              【讨论】:

                【解决方案11】:

                并且...如果您需要字符串的左侧部分:

                private string AllTheLeftPart(string theString)
                {       
                    string rightPart = theString.Substring(theString.LastIndexOf('-') + 1);
                
                    string leftPart theString.Replace("-" + rightPart, String.Empty);
                
                    return leftPart ;
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-02-25
                  • 1970-01-01
                  • 2012-08-12
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多