2012-11-02 50 views
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 
+0

你愿意使用正则表达式? – TLS

+0

@TLS:绝对如此。 – fuzz

回答

1

也许正则表达式?

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

Console.WriteLine(result); // Mc'Donald 
2

既然你开到正则表达式,将这个过载Regex.Replace的你需要什么?

Regex.Replace Method (String, 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 + "]"); 
    } 
} 
2

这里是没有正则表达式

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(); 
    } 
+1

我认为这只会限制单引号的第一个实例。可以修复,但需要考虑“数据”是否有多个单引号。 –

+0

你是对的,我意识到这一点,它与问题的原始代码一样 –

相关问题