如何使用C#中的Substring()获取字符串的最后五个字符?

58

我可以使用以下函数获取前三个字符。

但是,如何使用Substring()函数获取最后五个字符的输出("Three")?或者需要使用另一个字符串函数吗?

static void Main()
{
    string input = "OneTwoThree";

    // Get first three characters
    string sub = input.Substring(0, 3);
    Console.WriteLine("Substring: {0}", sub); // Output One. 
}
12个回答

79
如果您的输入字符串可能少于五个字符,那么请注意,如果 startIndex 参数为负数,string.Substring 会抛出一个 ArgumentOutOfRangeException 异常。
为解决这个潜在问题,您可以使用以下代码:
string sub = input.Substring(Math.Max(0, input.Length - 5));

更明确地说:

public static string Right(string input, int length)
{
    if (length >= input.Length)
    {
        return input;
    }
    else
    {
        return input.Substring(input.Length - length);
    }
}

你的代码运行良好。但我发现有点难理解。从MSDN上,我找到了 String::Substring Method ,它包括了 String.Substring (Int32)Substring(Int32, Int32)。为什么不包括像 Substring(fun()) 这样的格式呢?我认为你可以把一个函数 fun() 插入 Substring() 的参数中。谢谢。 - Nano HE
2
@Nano HE:Math.Max(int, int) 返回传入的两个数字中较大的一个。因此,在这种情况下,如果 input.Length 小于 5 个字符长度,则将 Substring 传递为 0,这实际上给出了整个 input。否则,您将获得右侧 5 个字符的子字符串。 - Phil Gan
谢谢你的回答!我遇到了一个非常类似的问题,我喜欢你如何使用数学函数来获取最大长度(尽管我正在使用它来获取最小长度,因为字符串可能比我指定的长度短)。我一直因为这个问题而遇到异常,但是你的解决方案是解决这个问题的一种优雅的方式。 - Namkce
那很好。我非常感激。 - user14237548

14
string sub = input.Substring(input.Length - 5);

10
如果您可以使用扩展方法,则可以安全地执行此操作,而不管字符串的长度如何:
public static string Right(this string text, int maxLength)
{
    if (string.IsNullOrEmpty(text) || maxLength <= 0)
    {
        return string.Empty;
    }

    if (maxLength < text.Length)
    {
        return text.Substring(text.Length - maxLength);
    }

    return text;
}

使用它的方法:

string sub = input.Right(5);

3
我非常讨厌SubString不是开箱即用的方式实现。通常,我们会在字符串长度小于LEN时调用Substring(0,LEN),我希望它能够在这种情况下正常工作,而不是抛出异常。虽然我使用Math.Min解决了这个问题,但我并不满意。 - Daniel Williams

10
static void Main()
    {
        string input = "OneTwoThree";

            //Get last 5 characters
        string sub = input.Substring(6);
        Console.WriteLine("Substring: {0}", sub); // Output Three. 
    }
  • Substring(0, 3) - 返回前三个字符的子字符串。 //One

  • Substring(3, 3) - 返回第二个三个字符的子字符串。 //Two

  • Substring(6) - 返回第七个字符之后的所有字符的子字符串。 //Three


2
这里有一个快速的扩展方法,可以模仿 PHP 语法。在使用扩展方法的代码文件中包含 AssemblyName.Extensions
然后你可以调用:
input.SubstringReverse(-5) and it will return "Three".

namespace AssemblyName.Extensions {

    public static class StringExtensions
    {
        /// <summary>
        /// Takes a negative integer - counts back from the end of the string.
        /// </summary>
        /// <param name="str"></param>
        /// <param name="length"></param>
        public static string SubstringReverse(this string str, int length)
        {
            if (length > 0) 
            {
                throw new ArgumentOutOfRangeException("Length must be less than zero.");
            }

            if (str.Length < Math.Abs(length))
            {
                throw new ArgumentOutOfRangeException("Length cannot be greater than the length of the string.");
            }

            return str.Substring((str.Length + length), Math.Abs(length));
        }
    }
}

2

一种方法是使用字符串的Length属性作为Substring的输入之一:

string sub = input.Substring(input.Length - 5); // Retrieves the last 5 characters of input

1

子字符串。该方法提取字符串。它需要子字符串的位置(起始索引、长度)。然后返回一个新字符串,其中包含该范围内的字符。

看一个小例子:

string input = "OneTwoThree";
// Get first three characters.
string sub = input.Substring(0, 3);
Console.WriteLine("Substring: {0}", sub);

输出:

子字符串:One


0

例如

string str = null;
string retString = null;
str = "This is substring test";
retString = str.Substring(8, 9);

这将返回“子字符串”

C# 子字符串示例源代码


0
string input = "OneTwoThree";
(if input.length >5)
{
string str=input.substring(input.length-5,5);
}

1
提供的代码可能有所帮助,但为了使其成为一个好的答案,您还应该描述/解释您的代码是如何解决问题的。 - ZygD
好的...没问题,我会处理的 @ZygD。 - hrk1991

0
在C# 8.0及更高版本中,您可以使用"[^5..]"来获取最后五个字符,并结合"?"运算符以避免可能的ArgumentOutOfRangeException。
string input1 = "0123456789";
string input2 = "0123";
Console.WriteLine(input1.Length >= 5 ? input1[^5..] : input1); //returns 56789
Console.WriteLine(input2.Length >= 5 ? input2[^5..] : input2); //returns 0123

从末尾计数的索引运算符范围运算符


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接