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

Posted

技术标签:

【中文标题】如何获取字符串的前五个字符【英文标题】:How to get the first five character of a String 【发布时间】:2013-04-03 05:55:31 【问题描述】:

我已经阅读了这个question to get first char 的字符串。有没有办法从 C# 中的字符串中获取前 n 个字符?

【问题讨论】:

上一个问题是关于char**s,而你是在问**characters。它们不是同一件事。 ???????? 是我昨天需要使用的两个字符,但在我使用的用 C# 编写的软件中失败了,因为程序员不知道 char 和字符之间的区别。不要掉入这个陷阱! 【参考方案1】:

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

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

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

string newString = oldstring[..5];

【讨论】:

【参考方案2】:

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

private string TakeFirstCharacters(string input, int characterAmount)

    return input?.Substring(0, Math.Min(input.Length, characterAmount));

【讨论】:

【参考方案3】:

.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' 将避免您需要检查给定字符串的长度。

【讨论】:

【参考方案4】:

这就是你在 2020 年的做法:

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

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

Console.WriteLine(first5.ToString());

不过,如今许多.NET API 都允许跨度。如果可能的话,坚持下去!

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

【讨论】:

我们确实需要在使用AsSpan之前查看.net版本@ “2020 年”几乎暗示您的目标是 .NET 5 或至少是 .NET Core。无论如何,如果您添加一些依赖项,它可以在.NET Framework 4.5+ 中工作。 如果你必须调用 .ToString() 来获取子字符串,这不是分配一个新的字符串吗?那么“避免分配临时字符串”的最初原因不再是使用这种方式的理由。 @AlexandruDicu 我认为在这一点上答案非常明确。这取决于您打算如何处理结果。 Console.WriteLine 在撰写本文时不支持 Span&lt;T&gt;,但许多其他 .NET API 支持。 Is it just me or AsSpan() 如果字符串 s 小于 5 个字符(在上面的示例中),将抛出 ArgumentOutOfRangeException。可能值得检查长度是我的观点。【参考方案5】:

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

Microsoft Docs

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

老办法:

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

新方法:

string newString = oldstring[..5];

乍一看,这似乎是为了缩短代码的可读性而做出的相当糟糕的权衡,但新功能为您提供了

    切片数组(以及字符串)的标准语法

    像这样很酷的东西:

    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]

【讨论】:

这有同样的字符串长度问题:你必须先检查它,否则它会抛出 ArgumentOutOfRangeException。 @AndersonPimentel 所以先检查一下?答案解决了问题,我们不应该编码害怕异常。【参考方案6】:

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

string str = data[0..5];

这里有更多关于Indices And Ranges的信息

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

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

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

【讨论】:

这是迄今为止更好的解决方案。当字符串长度小于子字符串长度时,仅使用子字符串会导致错误。 我们在 SQL Server 中使用的 LEFT 函数的最佳替代方案【参考方案10】:

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

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);

【讨论】:

【参考方案11】:

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

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

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

【讨论】:

该死的我要发布那个!!赞成。 (现在是 2019 年,为什么不能有一个字符串方法可以像 Mid$ 在 1985 年所做的那样?对于那些说“你不应该那样做”的人,好吧,你来为我写我的代码......你必须做...)【参考方案12】:

或者你可以使用String.ToCharArray()。 它将int startindexint length 作为参数并返回char[]

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

你仍然需要确保字符串的长度合适,否则会抛出ArgumentOutOfRangeException

【讨论】:

【参考方案13】:

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

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

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

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

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

【讨论】:

【参考方案14】:

我用:

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

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

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

【讨论】:

【参考方案15】:

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

我想你明白了……

【讨论】:

可爱的额外信息 很高兴你喜欢它。 这对我帮助很大,但你能解释一下它在该行中的具体作用吗? 我会检查一些关于子字符串的例子。它采用索引参数。起始索引是 0。如果你写的任何东西都比任何数组的最后一个索引更大(或更小),你会得到一个超出索引的异常。在示例中,该检查是为了避免该异常。 哈哈哈哈! :) 这是我回答的问题。我应该没有回答这个问题吗? :)【参考方案16】:

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

@item.First_Name.Substring(0,1)

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

【讨论】:

【参考方案17】:

试试下面的代码

 string Name = "Abhishek";
 string firstfour = Name.Substring(0, 4);
 Response.Write(firstfour);

【讨论】:

这与这个答案***.com/a/15942016/6198927和这个***.com/a/15942008/6198927没有任何不同【参考方案18】:

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

string str = yourString.Remove(n);

n - 您需要的字符数

例子

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

【讨论】:

这在内部与“this.Substring(0, 5)”相同,因此您需要确保字符串具有适当的长度。 如果你想要前 n 个字符,这只有在你知道字符串长度的情况下才有效。如果长度可以改变,这并不总是有效。我知道这对大多数人来说可能是显而易见的,但只是为任何路过的人提及它...... 另外,如果n等于字符串的长度,它会抛出一个错误,不像子字符串【参考方案19】:

您可以使用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;

【讨论】:

string val = new string(yourStringVariable.Take(6).ToArray());但是如果 yourStringVariable 的长度小于 5,子字符串会出错 IsNullOrWhiteSpace 在这里是错误的。考虑一个包含 10 个空格的字符串 - 您的代码将返回全部 10 个。请改用 IsNullOrEmpty。 (将IsNullOrWhiteSpace 与任何其他测试结合起来并不好;而是测试null+empty,然后Trim 如果这是指定的行为,则执行所需的任何测试/操作。) 您可以使用 String.Concat() 保存对 ToArray() 的调用,如下所示: string firstFivChar = String.Concat(yourStringVariable.Take(5));【参考方案20】:

下面是一个扩展方法,它检查字符串是否大于所需的大小,并将字符串缩短到定义的最大字符数并附加“...”。

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;
    

【讨论】:

【参考方案21】:

请尝试:

yourString.Substring(0, 5);

检查C# Substring、String.Substring Method

【讨论】:

如果yourString的长度小于5会抛出异常。为避免异常,我们可以根据条件进行子串化,如yourString.Length &lt;= 5 ? yourString : yourString.Substring(0, 5)【参考方案22】:
string str = "GoodMorning"

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

【讨论】:

如果变量“str”的长度小于5会出错

以上是关于如何获取字符串的前五个字符的主要内容,如果未能解决你的问题,请参考以下文章

读取一个文件,获取其中出现次数最多的前五个字符以及次数

如何删除数组的前五个元素?

Python:如何使用循环仅访问列表的一些布尔元素?

使用 LINQ 通过一个查询从数组中获取前五个元素和后五个元素

Javascript如何获取字符串的前三个字符

如何在 Python 中获取字符串的前 2 个字母?