如何获取字符串的前五个字符
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<T>
,但许多其他 .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 startindex
和int 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 <= 5 ? yourString : yourString.Substring(0, 5)
【参考方案22】:
string str = "GoodMorning"
string strModified = str.Substring(0,5);
【讨论】:
如果变量“str”的长度小于5会出错以上是关于如何获取字符串的前五个字符的主要内容,如果未能解决你的问题,请参考以下文章