我已阅读此问题以获取字符串的第一个字符。有没有办法从 C# 中的字符串中获取前 n 个字符?
22 回答
你可以使用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;
您可以使用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);
没有人提到在使用时如何进行适当的检查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()
函数会抛出异常,因为它会遍历不存在的字母。
我想你应该已经明白了...
问题.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”将防止您需要检查给定字符串的长度。
请注意,在 C# 8.0 中有一种新方法可以做到这一点:范围运算符
或者我喜欢称它们为熊猫切片。
老办法:
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]
使用 PadRight 函数来防止字符串太短,抓住你需要的,然后在一个语句中从末尾修剪空格。
strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();
我不知道为什么有人提到这个。但这是实现这一目标的最短和最简单的方法。
string str = yourString.Remove(n);
n
- 您需要的字符数
例子
var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141
附加五个空白字符,然后切断前五个并修剪结果。您附加的空格数应与您要剪切的数字相匹配。一定要在前面加上括号,.Substring(0,X)
否则你什么都不会附加。
string str = (yourStringVariable + " ").Substring(0,5).Trim();
使用这种技术,您不必担心ArgumentOutOfRangeException
其他答案中提到的问题。
string str = "GoodMorning"
string strModified = str.Substring(0,5);
这就是你在 2020 年的做法:
var s = "ABCDEFGH";
var first5 = s.AsSpan(0, 5);
Span<T>直接指向字符串的内存,避免分配临时字符串。当然,任何要求string
a 的后续方法都需要转换:
Console.WriteLine(first5.ToString());
不过,如今许多.NET
API 都允许跨度。如果可能的话,坚持他们!
注意:如果目标.NET Framework
添加对System.Memory包的引用,但不要期望同样出色的性能。
从 C# 中的字符串中获取前 n 个字符
String yourstring="Some Text";
String first_n_Number_of_Characters=yourstring.Substring(0,n);
下面是一个扩展方法,它检查字符串是否大于所需的字符串,并将字符串缩短为定义的最大字符数并附加“...”。
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;
}
}
请在 str 小于 5 时尝试此代码。
string strModified = str.Substring(0,str.Length>5?5:str.Length);
我用:
var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);
或者如果您也想检查空白(而不仅仅是空):
var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue
或者您可以使用String.ToCharArray()。
它接受int startindex
andint length
作为参数并返回一个char[]
new string(stringValue.ToCharArray(0,5))
您仍然需要确保字符串具有适当的长度,否则它会抛出一个ArgumentOutOfRangeException
如果我们只想要任何字段的前 5 个字符,那么这可以通过 Left Attribute 来实现
Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""
这就是我正在使用的,字符串少于所需字符没有问题
private string TakeFirstCharacters(string input, int characterAmount)
{
return input?.Substring(0, Math.Min(input.Length, characterAmount));
}
在 C# 8 中,您可以使用范围运算符。如果您的原始字符串短于所需长度,为了避免异常,您可以使用Math.Min
:
string newString = oldstring[..Math.Min(oldstring.Length, 5)];
当然,如果知道原来的字符串比较长,可以优化:
string newString = oldstring[..5];
我已经尝试了上述答案,我认为最好的是这个
@item.First_Name.Substring(0,1)
在这个我可以得到字符串的第一个字母
试试下面的代码
string Name = "Abhishek";
string firstfour = Name.Substring(0, 4);
Response.Write(firstfour);