【问题标题】:How to separate String into chars如何将字符串分隔为字符
【发布时间】:2011-03-06 14:25:46
【问题描述】:
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

有人可以帮忙吗?

【问题讨论】:

  • 你应该把 kw = kw + "/"+letters[i];这会解决它,但可能有更简单的方法来做到这一点
  • 附带说明,最好让您的 kw 变量成为解析函数的局部变量。特别是考虑到您要返回此值。
  • 谢谢 ROBOSHOP,我忘了递归也可以与字符串一起使用。这解决了问题。

标签: c# string parsing letters


【解决方案1】:

= vs +=String vs StringBuilder

你的问题出在这一行:

 kw = "/"+letters[i];

这是一个直接赋值,将覆盖上一次迭代中kw 的值。也许你想要+=。但是,此时您需要了解StringBuilder 以及为什么在循环中使用String 执行+= 会产生糟糕的性能。

相关问题


关于正则表达式

如果你想学习正则表达式,你也可以用一行来做到这一点。您只需匹配每个字符 x 并将其替换为 /x

参考文献


示例

这是一个说明性的 sn-p:

   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
  • 如果使用得当,正则表达式非常棒!

参考文献

附件

【讨论】:

  • 我找到了答案;请看我的评论。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    使用这个

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-12-28
        • 2018-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 2010-10-19
        • 1970-01-01
        • 2014-06-29
        相关资源
        最近更新 更多