我有一个字符串,我只需要获得前十个字符。有没有办法让我轻松做到这一点。
我希望有人能告诉我。
答案 0 :(得分:26)
string s = "Lots and lots of characters";
string firstTen = s.Substring(0, 10);
答案 1 :(得分:3)
取决于: - )
通常你可能正在寻找SubString ...但是如果你正在使用unicode进行花哨的东西,这表明哪里会出错(例如unicode range> 0xFFFF):
static void Main(string[] arg)
{
string ch = "(\xd808\xdd00汉语 or 漢語, Hànyǔ)";
Console.WriteLine(ch.Substring(0, Math.Min(ch.Length, 10)));
var enc = Encoding.UTF32.GetBytes(ch);
string first10chars = Encoding.UTF32.GetString(enc, 0, Math.Min(enc.Length, 4 * 10));
Console.WriteLine(first10chars);
Console.ReadLine();
}
出错的原因是因为字符是16位且长度检查UTF-16字符而不是unicode字符。那就是说,这可能不是你的情景。
答案 2 :(得分:2)
String.Substring:http://msdn.microsoft.com/en-us/library/aka44szs(v=VS.80).aspx
答案 3 :(得分:2)
只需使用aString.Substring(0, 10);
。
答案 4 :(得分:2)
即使字符串lengeth <10
,也不会有异常String s = "characters";
String firstTen = s.Substring(0, (s.Length < 10) ? s.Length : 10);
答案 5 :(得分:2)
string longStr = "A lot of characters";
string shortStr = new string(longStr.Take(10).ToArray());
答案 6 :(得分:1)
@Hiromi Nagashima
在c#中获取特定长度的替换是非常简单和容易的, 然而,以最有效的方式完成它是非常重要的。
要考虑的要点:
下面是以最简单的方式以最有效的方式执行它的示例。
ASPX:
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox runat="server" ID="txtInput"></asp:TextBox>
<asp:Button runat="server" ID="btn10Chars" onclick="btn10Chars_Click" text="show 10 Chars of string"/><br />
<asp:Label runat ="server" ID="lblOutput"></asp:Label>
</div>
</form>
C#:
public partial class Home : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btn10Chars_Click(object sender, EventArgs e)
{
lblOutput.Text = txtInput.Text.Length > 10 ? txtInput.Text.Substring(0, 10) : txtInput.Text + " : length is less than 10 chars...";
}
}
取消示例:
答案 7 :(得分:0)
许多选项如:
string original = "A string that will only contain 10 characters";
//first option
string test = original.Substring(0, 10);
//second option
string AnotherTest = original.Remove(10);
//third option
string SomeOtherTest = string.Concat(original.Take(10));
希望它有所帮助。
答案 8 :(得分:-1)
这取决于你对角色的意思。 C#char类型是WORD(或ushort - min值:0和最大值:65535(2 ^ 16))。不同的文本规范化可能会产生不同的结果,例如:NFC可能将字符表示为1个字符,而NFD表示与2相同的字符。
如果您只使用7位ASCII,则使用String.Substring应该有效。由于代理对和组合字符,文本规范化将在8位/扩展ASCII,UTF-8~32中发挥作用。
如果你想获取前10个字符(不是字符串),你应该使用:
public static string TakeCharacters(string input, int index, int count)
{
if (input == null) return null;
if (index >= input.Length)
throw new ArgumentOutOfRangeException(
"index",
string.Format("index {0} is out of range (max {1})", index, input.Length - 1));
if (count <= 0)
throw new ArgumentException("length should be greater than zero", "count");
var builder = new StringBuilder();
while (index < input.Length && count > 0)
{
var c = StringInfo.GetNextTextElement(input, index);
builder.Append(c);
index += c.Length;
count--;
}
return builder.ToString();
}
请注意,StringInfo组合了字符/对,GetNextTextElement返回一个字符串。索引和计数参数按值传递,因此可以在方法内部使用而不会出现锯齿。