如何将字符串分解为字符

3
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;
}

如果关键词是“Hello”,我希望输出的结果是/h/e/l/l/o,但目前只输出最后一个字符,即/o。

有人能帮忙吗?


你应该把 kw = kw + "/"+letters[i]; 改成这样,就可以解决问题了。但是可能有更简单的方法来完成它。 - Diskdrive
顺便提一下,最好将 kw 变量作为解析函数的本地变量。尤其是考虑到你正在返回此值。 - Xavier Poinas
谢谢ROBOSHOP,我忘了递归也可以用于字符串。这解决了问题。 - Asyk
4个回答

6

关于=+=,以及StringStringBuilder

你的问题出在这一行:

 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
  • 当正确使用时,正则表达式非常好用!

参考资料

附件


我已经找到了答案,请查看我的评论。 - Asyk

1

或者,如果您使用的是.NET 4.0,您可以这样做:

string someString = "abc";
string result = string.Join("/", (IEnumerable<char>)someString);

0
使用此

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

0

我尝试通过使用字符来优化它以减少内存的使用。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接