如何获取一个字符串的前五个字符

193

之前的问题是关于 **char**,而你问的是关于 字符。它们不是同一回事。 是我昨天需要使用的两个字符,但由于我使用的 C# 软件编写者不知道 char 和字符之间的区别,所以失败了。不要陷入这个陷阱! - hippietrail
22个回答

301
你可以使用 Enumerable.Take 来进行操作:
char[] array = yourStringVariable.Take(5).ToArray();

或者您可以使用String.Substring方法。

string str = yourStringVariable.Substring(0,5);

请记住,String.Substring在所需字符数大于字符串长度时会引发异常。

如果您想将结果作为字符串返回,则可以使用:

  • 使用字符串构造函数和LINQ的Take

string firstFivChar = new string(yourStringVariable.Take(5).ToArray());

这种方法的优点是无需事先检查长度。

  • 另一种方法是使用带有错误检查的String.Substring

例如:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;

3
如果yourStringVariable的长度小于5,则使用Substring会出错。要获取前6个字符并将其转换为字符串,请使用以下代码:string val = new string(yourStringVariable.Take(6).ToArray()); - Moji
3
"IsNullOrWhiteSpace" 在这里是错误的。考虑一个有 10 个空格的字符串 - 您的代码将返回所有 10 个空格。请改用 "IsNullOrEmpty"。(不建议将“IsNullOrWhiteSpace”与其他测试组合使用;相反,应先测试 null+empty,然后如果需要进行 "Trim",再进行任何所需的测试/操作。) - ToolmakerSteve
1
你可以使用String.Concat()来避免调用ToArray(),像这样:string firstFivChar = String.Concat(yourStringVariable.Take(5)); - BlueFuzzyThing
你可以在if条件语句中检查StringVariable.length>5,并使用substring(0,5)。 - sumitkhatrii

60

3
如果 yourString 的长度小于5,则会抛出异常。为了避免异常,我们可以根据条件进行子字符串操作,例如 yourString.Length <= 5 ? yourString : yourString.Substring(0, 5) - Zaheer

45

您可以使用Substring(int startIndex, int length)函数。

string result = str.Substring(0,5);

该方法返回一个以指定字符位置开始且长度为指定值的子字符串。该方法不会修改当前实例的值,而是返回一个新字符串,其长度为从当前字符串中的startIndex位置开始的characters个字符,MSDN
如果源字符串少于五个字符怎么办?使用上述方法会导致异常。我们可以添加条件来检查字符串中的字符数是否大于5,然后通过Substring获取前五个字符。请注意,我已将源字符串分配给firstFiveChar变量。如果字符少于5,则firstFiveChar不会更改,因此不需要else部分。
string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);

43

没有人提到如何在使用Substring()时进行适当的检查,因此我想为此做出贡献。

如果您不想使用Linq而选择Substring(),则必须确保您的字符串大于Substring()函数的第二个参数(长度)。

假设您需要前5个字符。您应该进行适当的检查来获取它们,例如:

string title = "love"; // 15 characters
var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5);

// firstFiveChars: "love" (4 characters)

如果没有这个检查,Substring()函数会抛出异常,因为它会迭代不存在的字母。

我想你已经明白了...


可爱的额外信息 - Rob85
我很高兴你喜欢它。 - ilter
这对我很有帮助,但你能解释一下那行代码具体在做什么吗? - jimbob
我会查看一些有关子字符串的示例。它需要索引参数。起始索引为0。如果您写入任何大于(或小于)任何数组的最后一个索引的内容,您将得到一个超出索引异常。该示例中的检查是为了避免该异常。 - ilter

26

提醒一下,在C# 8.0中有一种新的方法:范围运算符。

Microsoft Docs

或者,就像我喜欢称呼它们一样,Pandas切片。

旧方法:

string newString = oldstring.Substring(0, 5);

新方式:

string newString = oldstring[..5];

乍一看,这似乎是在一些可读性方面做出了一些牺牲以获得更短的代码,但新功能为您提供了:

  1. 一个用于切片数组(因此也适用于字符串)的标准语法
  2. 很酷的东西,比如:

    var slice1 = list[2..^3]; // list[Range.Create(2, Index.CreateFromEnd(3))]

    var slice2 = list[..^3]; // list[Range.ToEnd(Index.CreateFromEnd(3))]

    var slice3 = list[2..]; // list[Range.FromStart(2)]

    var slice4 = list[..]; // list[Range.All]


1
这也存在相同的字符串长度问题:你必须先检查它,否则它可能会抛出ArgumentOutOfRangeException异常。 - Anderson Pimentel
@AndersonPimentel 所以先检查一下?答案解决了问题,我们不应该害怕异常编码。 - Pablo Aguirre de Souza

25

.Substring(,) 的问题在于,你需要确保给定的字符串长度至少与所需字符数相同,否则将抛出 ArgumentOutOfRangeException 异常。

解决方案1(使用 'Substring'):

var firstFive = stringValue != null && stringValue.Length > 5 ? 
                   stringValue.Substring(0, 5) :
                   stringValue;
使用.Substring()的缺点是您需要检查给定字符串的长度。 解决方案2(使用“Take”):
var firstFive = stringValue != null ? 
                    string.Join("", stringValue.Take(5)) : 
                    null;

使用 'Take' 会避免您需要检查给定字符串的长度。


16
使用PadRight函数防止字符串过短,一条语句中获取所需内容,然后将末尾的空格修剪掉。
strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();

1
这是目前为止更好的解决方案。仅使用 Substring 可能会在字符串长度低于子字符串长度时导致错误。 - Asiri Dissanayaka
在SQL Server中使用的LEFT函数的最佳替代方案是什么? - vibs2006

12

我不知道为什么没有人提到这个。 但这是实现这一目标最短、最简单的方法。

string str = yourString.Remove(n);

n - 您需要的字符数

示例

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141

5
这与 "this.Substring(0, 5)" 的内部实现相同,因此您需要确保字符串具有适当的长度。 - PersyJack
如果你想要前n个字符,那么这只有在你知道字符串的长度时才能起作用。如果长度可能会改变,这种方法并不总是有效的。我知道这对大多数人来说可能很明显,但还是提一下以防万一... - user1289451
另外,如果n等于字符串的长度,它会抛出一个错误,不同于substring。 - Ash

10

追加五个空格字符,然后删除前五个字符并修剪结果。 追加的空格数应与您要删除的数量相匹配。.Substring(0,X)之前一定要包括括号,否则你将不会追加任何字符。

string str = (yourStringVariable + "    ").Substring(0,5).Trim();

使用这种技术,您就不必担心其他答案中提到的ArgumentOutOfRangeException


1
该死,我正要发布那个!! 已赞。 (现在都2019年了,为什么字符串上不能像1985年的Mid$函数一样有一个方法呢?对于那些说“你不应该这样做”的人,好吧,你来替我写代码吧...你将不得不这样做...) - FastAl

7
string str = "GoodMorning"

string strModified = str.Substring(0,5);

2
如果变量“str”的长度小于5,则会出现错误。 - Moji

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