2

次の C# コードを使用して、一重引用符の後に小文字を大文字に変更しています。

public virtual string FirstName
{
    get { return _firstName; }
    set
    {
        if (value != null)
        {
            int pos = value.IndexOf("'", 0);
            int strlength = value.Length - 1;
            if (pos >= 0 && pos != strlength)
            {
                string temp = value[pos + 1].ToString();
                temp = temp.ToUpper();
                value = value.Remove(pos + 1, 1);
                value = value.Insert(pos + 1, temp);
            }
        }
    }
}

私には、これはやり過ぎに見えます。目的の結果を達成するためのより簡単な方法はありますか:

Value: Mc'donald
Expected: Mc'Donald
4

3 に答える 3

2

ここにregexなしです

  int pos = data.IndexOf("'");
  if (pos >= 0 && pos < data.Length - 1)
  {
    StringBuilder sbl = new StringBuilder(data);
    sbl[pos + 1] = char.ToUpper(sbl[pos + 1]);
    data = sbl.ToString();
  }
于 2012-11-02T01:11:11.177 に答える
2

あなたは正規表現にオープンなので、このオーバーロードはRegex.Replaceあなたが必要とすることをしますか?

Regex.Replace メソッド (文字列、MatchEvaluator)

上記のリンクにある例の修正版を次に示します。パターンを使用し'\w、一致を大文字で返すように変更しました。

using System;
using System.Text.RegularExpressions;

class RegExSample
{
static string CapText(Match m)
    {
        // Return the match in upper case
        return m.ToString().ToUpperInvariant();
    }

    static void Main()
    {
        string text = "Mc'donald";

        System.Console.WriteLine("text=[" + text + "]");

        Regex rx = new Regex(@"'\w");

        string result = rx.Replace(text, new MatchEvaluator(RegExSample.CapText));

        System.Console.WriteLine("result=[" + result + "]");
    }
}
于 2012-11-02T01:04:46.650 に答える
1

もしかして正規表現?

string value = "Mc'donald";
string found = Regex.Match(value, "'[\\w]").Value;
string result = value.Replace(found, found.ToUpper());

Console.WriteLine(result); // Mc'Donald
于 2012-11-02T01:02:53.390 に答える