2012-11-02 81 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

你是對的,我意識到這一點,它與問題的原始代碼一樣 –

相關問題