166

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

4

22 回答 22

262

你可以使用Enumerable.Take像:

char[] array = yourStringVariable.Take(5).ToArray();

或者您可以使用String.Substring

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

请记住,String.Substring如果字符串的长度小于所需的字符,这可能会引发异常。

如果您想以字符串形式返回结果,则可以使用:

  • 使用字符串构造函数和 LINQTake

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

该方法的优点是不会事先检查长度。

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

喜欢:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;
于 2013-04-11T06:23:01.617 回答
55

请试试:

yourString.Substring(0, 5);

检查C# Substring , String.Substring 方法

于 2013-04-11T06:23:40.560 回答
43

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

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

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

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

string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);
于 2013-04-11T06:23:13.837 回答
34

没有人提到在使用时如何进行适当的检查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()函数会抛出异常,因为它会遍历不存在的字母。

我想你应该已经明白了...

于 2015-05-05T22:43:06.163 回答
23

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

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

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”将防止您需要检查给定字符串的长度。

于 2014-09-19T09:05:34.233 回答
20

请注意,在 C# 8.0 中有一种新方法可以做到这一点:范围运算符

微软文档

或者我喜欢称它们为熊猫切片。

老办法:

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

新的方法:

string newString = oldstring[..5];

乍一看,这似乎是对较短代码的一些可读性的相当糟糕的权衡,但新功能为您提供

  1. 切片数组(以及字符串)的标准语法
  2. 像这样很酷的东西:

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

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

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

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

于 2020-02-04T03:01:31.220 回答
14

使用 PadRight 函数来防止字符串太短,抓住你需要的,然后在一个语句中从末尾修剪空格。

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();
于 2018-01-05T05:57:55.050 回答
12

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

string str = yourString.Remove(n);

n- 您需要的字符数

例子

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141
于 2015-11-10T12:35:20.060 回答
10

附加五个空白字符,然后切断前五个并修剪结果。您附加的空格数应与您要剪切的数字相匹配。一定要在前面加上括号,.Substring(0,X)否则你什么都不会附加。

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

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

于 2017-03-03T19:24:02.123 回答
7
string str = "GoodMorning"

string strModified = str.Substring(0,5);
于 2013-04-11T06:23:39.603 回答
6

这就是你在 2020 年的做法:

var s = "ABCDEFGH";
var first5 = s.AsSpan(0, 5);

Span<T>直接指向字符串的内存,避免分配临时字符串。当然,任何要求stringa 的后续方法都需要转换:

Console.WriteLine(first5.ToString());

不过,如今许多.NETAPI 都允许跨度。如果可能的话,坚持他们!

注意:如果目标.NET Framework添加对System.Memory包的引用,但不要期望同样出色的性能。

于 2020-09-28T07:45:02.793 回答
4

C# 8.0中,您可以像这样获取字符串的前五个字符

string str = data[0..5];

这是有关指数和范围的更多信息

于 2019-11-05T11:25:43.467 回答
3

从 C# 中的字符串中获取前 n 个字符

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);
于 2017-09-21T00:19:44.723 回答
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;
    }
}
于 2015-02-04T13:57:24.537 回答
2

请在 str 小于 5 时尝试此代码。

string strModified = str.Substring(0,str.Length>5?5:str.Length);
于 2019-07-31T10:29:31.050 回答
1

我用:

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

或者如果您也想检查空白(而不仅仅是空):

var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue
于 2017-06-01T19:37:41.963 回答
1

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

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

您仍然需要确保字符串具有适当的长度,否则它会抛出一个ArgumentOutOfRangeException

于 2017-07-05T07:41:48.670 回答
0

如果我们只想要任何字段的前 5 个字符,那么这可以通过 Left Attribute 来实现

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""
于 2019-05-10T05:52:54.907 回答
0

这就是我正在使用的,字符串少于所需字符没有问题

private string TakeFirstCharacters(string input, int characterAmount)
{
    return input?.Substring(0, Math.Min(input.Length, characterAmount));
}
于 2022-01-09T14:15:29.733 回答
0

在 C# 8 中,您可以使用范围运算符。如果您的原始字符串短于所需长度,为了避免异常,您可以使用Math.Min

string newString = oldstring[..Math.Min(oldstring.Length, 5)];

当然,如果知道原来的字符串比较长,可以优化:

string newString = oldstring[..5];
于 2022-02-03T11:39:37.163 回答
-3

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

@item.First_Name.Substring(0,1)

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

于 2016-11-09T19:10:36.037 回答
-3

试试下面的代码

 string Name = "Abhishek";
 string firstfour = Name.Substring(0, 4);
 Response.Write(firstfour);
于 2016-09-02T08:49:07.287 回答