Подтвердить что ты не робот

Как я могу получить только первые десять символов строки в С#

У меня есть строка, и мне нужно получить только первые десять символов. Есть ли способ, которым я могу сделать это легко.

Надеюсь, кто-то покажет мне.

4b9b3361

Ответ 1

string s = "Lots and lots of characters";
string firstTen = s.Substring(0, 10);

Ответ 2

Вы можете создать метод расширения, например:

public static class Extension
{
    public static string Left(this String input, int length)
    {
        return (input.Length < length) ? input : input.Substring(0, length);
    }
}

а затем вызовите его следующим образом:

string something = "I am a string... truncate me!";
something.Left(10);

Ответ 3

Быстрый, однострочный, где переменная s - ваша строка:

public string GetFirstTenCharacters(string s)
{
    // This says "If string s is less than 10 characters, return s.
    // Otherwise, return the first 10 characters of s."
    return (s.Length < 10) ? s : s.Substring(0, 10);
}

И просто вызовите этот метод следующим образом:

string result = this.GetFirstTenCharacters("Hello, this is a string!");

Ответ 4

Зависит: -)

Обычно вы, вероятно, ищете SubString... но если вы делаете причудливые вещи с помощью unicode, это показывает, где это пойдет не так (например, диапазоны Unicode > 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. Тем не менее, это, вероятно, не ваш сценарий.

Ответ 6

Просто используйте aString.Substring(0, 10);.

Ответ 7

string longStr = "A lot of characters";
string shortStr = new string(longStr.Take(10).ToArray());

Ответ 8

не будет никакого исключения, даже если строка lengeth равна < 10

String s = "characters";
String firstTen = s.Substring(0, (s.Length < 10) ? s.Length : 10);

Ответ 9

Множество опций, например:

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));

Надеюсь, что это поможет.

Ответ 10

@Хироми Нагашима

Получение подстроки определенной длины очень просто и легко в С#, однако важно, чтобы это было сделано наиболее эффективным способом.

следует учитывать:

  • Обработка ошибок
  • Производительность

ниже - пример выполнения его самым простым способом и наиболее эффективным способом.

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>

С#:

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

Уберите пример:

  • Обработка ошибок без использования try catch.
  • Используется оператор Ternary, который лучше всего работает с точки зрения производительности при сравнении с условием if.
  • вместе со своей только одной строкой кода для достижения требуемой функциональности.

Ответ 11

Это зависит от того, что вы подразумеваете под символом. Тип С# char - это WORD (или значение ushort-min: 0 и максимальное значение: 65535 (2 ^ 16)). Разная нормализация текста может давать разные результаты, например: NFC может представлять символ как 1 char, в то время как NFD будет представлять тот же символ, что и 2.

Использование String.Substring должно работать, если вы используете только 7-битный ASCII. Нормализация текста будет играть роль в 8-битных/расширенных ASCII, UTF-8 ~ 32 из-за суррогатных пар и комбинирования символов.

Если вы хотите захватить первые 10 символов (не char), вы должны использовать:

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 возвращает строку. Параметры индекса и счета передаются по значению и поэтому могут использоваться внутри метода без сглаживания.