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

誰か助けてくれませんか?

4

4 に答える 4

6

=vs+=Stringvs _StringBuilder

あなたの問題はこの行にあります:

 kw = "/"+letters[i];

これは単純な代入でありkw、前の反復からの値を上書きします。おそらくあなたがしたい+=。ただし、この時点で、ループ内で使用するとパフォーマンスが低下する理由StringBuilderとその理由を知る必要があります。+=String

関連する質問


正規表現について

正規表現を学習する準備ができている場合は、これを 1 行で行うこともできます。各文字を一致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
  • 適切に使用すると、正規表現は素晴らしいものになります!

参考文献

付属品

于 2010-06-22T01:37:19.283 に答える
1

または、.NET 4.0 を使用している場合は、次のようにすることができます。

string someString = "abc";
string result = string.Join("/", (IEnumerable<char>)someString);
于 2010-06-22T01:44:05.507 に答える
0

charを使用して、メモリの使用量を減らすようにこれを最適化しようとしました。

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);
}
于 2010-06-22T08:57:56.117 に答える
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;
}
于 2010-06-22T07:12:01.753 に答える