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

193

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

6

以下是2020年的做法:

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

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

Console.WriteLine(first5.ToString());

现在许多 .NET API 允许使用 Spans,如果可能的话请尽量使用它们。

注意:如果目标平台是 .NET Framework,请添加对 System.Memory 包的引用,但不要期望获得相同的出色性能。


在使用 AsSpan 之前,我们确实需要查看 .net 版本。 - Zaheer
“在2020年”基本上意味着您的目标是.NET 5或至少.NET Core。无论如何,如果您添加一些依赖项,它也可以在.NET Framework 4.5+中工作。 - l33t
如果你必须调用.ToString()来获取子串,那么这不会分配一个新的字符串吗?那么“避免分配临时字符串”的最初原因就不再是使用此方法的理由了。 - Alexandru Dicu
@AlexandruDicu 我认为这一点的答案非常清楚。这取决于您打算如何使用结果。在编写时,Console.WriteLine不支持Span<T>,但许多其他.NET API支持。 - l33t
只有我一个人发现,如果字符串s的长度小于5个字符(在上面的示例中),AsSpan()会抛出ArgumentOutOfRangeException异常。检查长度可能是值得的。 - army
当然会抛出异常。如果你不想要这个异常,你应该先检查长度。 - l33t

4
C# 8.0 中,您可以通过以下方式获取字符串的前五个字符。
string str = data[0..5];

这里是关于索引和范围的更多信息。


3
从C#字符串中获取前n个字符
String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);

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;
    }
}

2
在 C# 8 中,您可以使用范围运算符。为了避免如果原始字符串比所需长度短而引发异常,您可以使用 Math.Min
string newString = oldstring[..Math.Min(oldstring.Length, 5)];

当然,如果你知道原始字符串更长,你可以进行优化:
string newString = oldstring[..5];

2

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

最初的回答:

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

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

1
或者您可以使用String.ToCharArray()。它需要int startindexint length作为参数,并返回一个char[]
new string(stringValue.ToCharArray(0,5))

你仍需要确保字符串具有适当的长度,否则它将抛出 ArgumentOutOfRangeException


1

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

private string TakeFirstCharacters(string input, int characterAmount)
{
    return input?.Substring(0, Math.Min(input.Length, characterAmount));
}

0
如果我们只想从任何字段中获取前5个字符,那么可以使用Left属性来实现。
Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""

这个库是哪个? - nawfal

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