Как разделить строку на символы - PullRequest
3 голосов
/ 22 июня 2010
public static string kw;

public String parse(String keyword)
{
    this.keyword = keyword;
    char[] letters = keyword.ToCharArray();
    string g;

    long length = System.Convert.ToInt64(keyword.Length.ToString());
    for (int i = 0; i <= length-1; i++)
    {
        kw = "/"+letters[i];
    }
    return kw;
}

Так что, если ключевое слово, скажем, "Привет".Я хочу, чтобы это вывело / h / e / l / l / o, но на данный момент выводит только последний символ, в данном случае / o

Может кто-нибудь помочь?

Ответы [ 4 ]

6 голосов
/ 22 июня 2010

на = против += и String против StringBuilder

Ваша проблема в этой строке:

 kw = "/"+letters[i];

Это прямое присваивание, которое перезапишет значение kw из предыдущей итерации. Возможно, вы хотите +=. Однако на данный момент вам нужно знать о StringBuilder и почему выполнение += с String в цикле приводит к плохой производительности.

Похожие вопросы


О регулярных выражениях

Если вы хотите изучать регулярные выражения, вы также можете сделать это одной строкой. Вы просто сопоставляете каждый символ x и заменяете его на /x.

Ссылки


* * Пример одна тысяча пятьдесят пять * * тысяча пятьдесят шесть

Вот фрагмент кода, который должен быть иллюстративным:

   string keyword = "hello";

   foreach (char ch in keyword) {
      Console.Write("[" + ch + "]");
   }
   Console.WriteLine();
   // prints "[h][e][l][l][o]"

   StringBuilder sb = new StringBuilder();
   for (int i = 0; i < keyword.Length; i++) {
      sb.Append("<" + keyword[i] + ">");
   }
   Console.WriteLine(sb);
   // prints "<h><e><l><l><o>"

   Console.WriteLine(new Regex(@"(?=.)").Replace(keyword, @"/"));
   // prints "/h/e/l/l/o"

   Console.WriteLine(new Regex(@"(.)").Replace(keyword, @"($1$1)"));
   // prints "(hh)(ee)(ll)(ll)(oo)"

Некоторые ключевые идеи:

  • Если вам не нужен явный индекс, используйте цикл foreach
  • При построении строки в цикле используйте StringBuilder
  • При правильном использовании регулярные выражения великолепны!

Ссылки

Вложения

1 голос
/ 22 июня 2010

Или, если вы используете .NET 4.0, вы можете сделать это:

string someString = "abc";
string result = string.Join("/", (IEnumerable<char>)someString);
0 голосов
/ 22 июня 2010

Я попытался оптимизировать это, чтобы использовать меньше памяти, работая с символами.

public string Parse(string input)
{
    char[] arrResult = new char[input.Length*2];
    int i = 0;
    Array.ForEach<char>(input.ToCharArray(), delegate(char c)
                                                {
                                                    arrResult[i++] = '/';
                                                    arrResult[i++] = c;
                                                });
    return new string(arrResult);
}
0 голосов
/ 22 июня 2010

Используйте это

public String parse(String keyword)
{
    if (string.IsNullOrEmpty(keyword))
        return string.Empty;

    var retVal = (from v in keyword.ToArray()
                    select v.ToString())
                    .Aggregate((a, b) => a + "/" +b);

    return retVal;
}
...