如何在C#中只获取字符串的前十个字符

时间:2011-05-14 14:30:28

标签: c# substring

我有一个字符串,我只需要获得前十个字符。有没有办法让我轻松做到这一点。

我希望有人能告诉我。

9 个答案:

答案 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)

答案 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#中获取特定长度的替换是非常简单和容易的, 然而,以最有效的方式完成它是非常重要的。

要考虑的要点:

  1. 错误处理
  2. 性能
  3. 下面是以最简单的方式以最有效的方式执行它的示例。

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

    取消示例:

    1. 不使用try catch错误处理。
    2. 使用三元运算符,与if条件相比,性能最佳。
    3. 只需一行代码即可实现所需的功能。

答案 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返回一个字符串。索引和计数参数按值传递,因此可以在方法内部使用而不会出现锯齿。