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


133

我已阅读此问题以获取字符串的第一个字符。有没有办法从C#中的字符串中获取前n个字符?


上一个问题是询问char**,而您询问的是**字符。它们不是同一件事。𣊾𣇞是两个字符,我需要用昨天刚它未能在C#编写我的软件使用,因为程序员不知道之间的区别char和字符。不要陷入这个陷阱!
hippietrail

Answers:


218

您可以使用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
字符串val =新字符串(yourStringVariable.Take(6).ToArray()); 但是如果yourStringVariable的长度小于5,则子字符串将出错
Moji

1
IsNullOrWhiteSpace这是错的。考虑一个包含10个空格的字符串-您的代码将返回所有10个空格。请IsNullOrEmpty改用。(最好不要IsNullOrWhiteSpace与其他任何测试结合使用;而是测试null + empty,然后测试Trim是否指定了行为,然后执行所需的任何测试/操作。)
ToolmakerSteve18年

1
您可以像这样使用String.Concat()保存对ToArray()的调用:string firstFivChar = String.Concat(yourStringVariable.Take(5));
BlueFuzzyThing


38

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

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

子字符串从指定的字符位置开始,并具有指定的长度。此方法不会修改当前实例的值。而是返回一个新字符串,该字符串的长度字符从当前字符串MSDN中的startIndex位置开始

如果源字符串少于五个字符怎么办?通过使用上述方法,您将获得异常。我们可以通过条件来检查字符串中的字符数是否大于5,然后通过子字符串获得前5个字符。注意我已将源字符串分配给firstFiveChar变量。如果字符小于5,则firstFiveChar不会更改,因此不需要part。

string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);

29

没有人提到在使用时如何进行正确的检查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 2015年

这对我很有帮助,但是您能解释一下它在做什么吗?
jimbob

我会检查一些有关子串的例子。它采用索引参数。起始索引为0。如果您编写的内容大于(或小于此值)任何数组的最后一个索引,则将出现索引不足异常。在示例中,该检查是为了避免该异常。
ilter

哈哈哈哈哈!:)这是我回答的问题。我应该留下未回答的问题吗?:)
ilter

18

问题.Substring(,)是,您需要确保给定的字符串至少具有要求的字符数的长度,否则ArgumentOutOfRangeException将抛出。

解决方案1(使用“子字符串”):

var firstFive = stringValue != null ? 
                   stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) :
                   null;

使用的缺点.Substring(是您需要检查给定字符串的长度。

解决方案2(使用“接受”):

var firstFive = stringValue != null ? 
                    string.Join("", stringValue.Take(5)) : 
                    null;

使用“ Take”将防止您需要检查给定字符串的长度。


13

使用PadRight函数可防止字符串太短,抓住所需的内容,然后在一条语句中从尾部开始全部修剪空格。

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();

1
到目前为止,这是更好的解决方案。当字符串的长度小于子字符串的长度时,仅使用子字符串会导致错误。
Asiri Dissanayaka,

在SQL Server中使用的LEFT函数的最佳替代方法
vibs2006

11

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

string str = yourString.Remove(n);

n -您需要的字符数

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

3
这在内部与“ this.Substring(0,5)”相同,因此您需要确保字符串具有正确的长度。
PersyJack

在需要前n个字符的情况下,仅当您知道字符串的长度时,此方法才有效。如果长度可以更改,则此方法将不总是有效。我知道这对大多数人来说可能是显而易见的,但对于任何路过的人
都只

10

附加五个空白字符,然后截断前五个字符并修剪结果。您追加的空格数量应与您要剪切的数量匹配。请务必在前面加上括号,.Substring(0,X)否则将不添加任何内容。

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

使用此技术,您不必担心ArgumentOutOfRangeException其他答案中提到的问题。


1
该死的,我要去贴那个!!赞成。(现在是2019年,为什么不能在字符串上执行与Mid $在1985年一样的方法?对于那些说“您不应该那样做”的人,您可以为我编写代码...您必须做...)
FastAl


6

请注意,C#8.0中提供了一种新的方法:范围运算符

微软文档

或我喜欢称呼它们为“熊猫片”。

旧方法:

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 [..]; //列表[Range.All]



2

下面是一个扩展方法,该方法检查字符串是否大于所需的字符串,并将字符串缩短为已定义的最大字符数,并附加'...'。

public static class StringExtensions
{
    public static string Ellipsis(this string s, int charsToDisplay)
    {
        if (!string.IsNullOrWhiteSpace(s))
            return s.Length <= charsToDisplay ? s : new string(s.Take(charsToDisplay).ToArray()) + "...";
        return String.Empty;
    }
}


1

我用:

var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);

或替代方法,如果您也想检查空白(而不是仅Null):

var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue

1

或者,您可以使用String.ToCharArray()
它以int startindexint length作为参数并返回一个char[]

new string(stringValue.ToCharArray(0,5))

您仍然需要确保字符串的长度正确,否则它将抛出 ArgumentOutOfRangeException


1

当str小于5时,请尝试使用此代码。

string strModified = str.Substring(0,str.Length>5?5:str.Length);

0

如果我们只需要任何字段的前5个字符,则可以通过Left Attribute实现

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""


-3

我已经尝试了以上答案,我认为最好的就是这个

@item.First_Name.Substring(0,1)

这样我可以得到字符串的第一个字母

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.