0

私が持っている文字列を解析する別の/より良い方法があるかどうかを確認しようとしています。

文字列は「#def xyz[timer=50, fill=10]」です。この文字列から、タイマーを取得して値を埋めようとしています。

私が現在持っているコードは次のとおりです。

string def = "#def xyz[timer=50, fill=10]";
string _timer = def.Remove(def.IndexOf(","));
_timer = _timer.Remove(0, _timer.IndexOf("=", _timer.IndexOf("timer")) + 1);

string _fill = def.Remove(def.IndexOf("]"));
_fill = _fill.Remove(0, _fill.IndexOf("=", _fill.IndexOf("fill")) + 1);

int timer = Int32.Parse(_timer);
int fill = Int32.Parse(_fill);

助言がありますか?

前もって感謝します!

4

3 に答える 3

6

おそらく正規表現を使用するでしょう。例えば:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        // You can create the regex once and reuse it, of course. Adjust
        // as necessary if the name isn't always "xyz" for example.
        Regex regex = new Regex(@"^#def xyz\[timer=(\d+), fill=(\d+)\]$");
        string input = "#def xyz[timer=50, fill=10]";
        Match match = regex.Match(input);
        if (match.Success)
        {
            int fill = int.Parse(match.Groups[1].Value);
            int timer = int.Parse(match.Groups[2].Value);
            Console.WriteLine("Fill={0}, timer={1}", fill, timer);
        }
    }
}

ノート:

  • これは負でない整数のみを扱います
  • 値が範囲外の場合、(例外を除いて) 失敗します。int

私はそれがあなたがそれらのRemove呼び出しよりも明確に何をしているのかを示していると思います...

于 2013-01-02T20:00:27.103 に答える
1
      Match m = Regex.Match("#def xyz[timer=50, fill=10]", "timer=([0-9]+?), fill=([0-9]+?)[]]");

      string timer = m.Result("$1");
      string fill = m.Result("$2");
于 2013-01-02T20:00:47.700 に答える
0

ほとんどの場合、正規表現よりもはるかに高速です。テストはしていませんが、ここでは高速になると思います。もちろん、このコードにはほとんどエラー チェックがありません。

void Main()
{
  string def = "#def xyz[timer=50, fill=10]";

  string [] inBracket = def.Split("[]".ToCharArray());

  string [] elements = inBracket[1].Split(",".ToCharArray());

  int timer = int.Parse(elements[0].Split("=".ToCharArray())[1]);

  int fill = int.Parse(elements[1].Split("=".ToCharArray())[1]);

  Console.WriteLine("timer = "+timer.ToString());
  Console.WriteLine("fill = "+fill.ToString());

}
于 2013-01-03T18:45:25.337 に答える