2014-12-04 34 views
0

我需要在第二個之前大寫 - 從.NET中的字符串開始。做這個的最好方式是什麼?第二個短劃線之前的字符串可以是任何東西。一旦完成,我需要一個新的單個字符串。大寫的一切在.NET中的第n個字符之前

之前

Tt-Fga - Louisville - Kentucky 

TT-FGA - Louisville - Kentucky 
+0

分裂的連字符,.ToUpper()在數組的前兩個元素?不確定這是否太基本?你需要一種奇特的方式來做到這一點? – user1666620 2014-12-04 13:43:47

+0

IndexOf找到第二個連字符,然後子字符串(第一部分).ToUpper +子字符串(第二部分) – 2014-12-04 13:44:26

+0

Split String By - 並將其存儲到數組中。之後它使用ToUpper()作爲前兩個數組的元素.... – yash 2014-12-04 13:45:19

回答

0

我繼續做下去。如果有更好的答案,讓我知道。

var parts = @event.EventParent.Name.Split(new[] {'-'}, StringSplitOptions.RemoveEmptyEntries); 

        for (int i = 0; i < parts.Length; i++) 
        { 
         if (i >= 2) 
          break; 

         parts[i] = parts[i].ToUpper(); 
        } 
        @event.EventParent.Name = string.Join("-", parts); 
+0

分割將不必要地構造一個新的數組和額外的字符串,然後必須重新組合在一起。使用'IndexOf'更有效率。 – 2014-12-04 13:54:13

+0

至少,使用指定最大元素數量的「Split」重載,以便將其限制爲3件。 – 2014-12-04 13:54:42

+2

你試過的應該是你的問題。這樣你就不會在你的問題上吸引消極因素,因爲你顯然沒有在你的答案上做任何事情和消極因素,因爲它不是很好。 – weston 2014-12-04 13:56:11

0
(.*?-.*)(?=-) 

您可以使用$1.upper()或東西是可以在c#更換here.Replace。

http://regex101.com/r/yR3mM3/50

+0

你認爲正則表達式對於這麼簡單的工作有點沉重嗎?這無疑會慢得多。 – 2014-12-04 13:51:53

+1

@DavidPfeffer它會慢一些,但問題是標籤正則表達式,所以爲什麼我們不能顯示OP的各種選擇,讓他選擇最好的? – vks 2014-12-04 13:55:35

+0

這是一個公平點......我沒有注意到標籤。 – 2014-12-04 13:56:13

1
  1. 識別連字符的位置與IndexOf。你必須使用這個函數兩次,這樣你才能找到第一個連字符,然後找到第二個連字符。
  2. 構造只包含與Substring一樣的字符的子字符串。構建包含所有剩餘字符的子字符串。
  3. 大寫的第一個字符串與ToUpper
  4. 與+運算符連接。
2

這應該把工作爲您的特定情況下完成的:

public static string ToUpperUntilSecondHyphen(string text) 
{ 
    int index = text.IndexOf('-', text.IndexOf('-') + 1); 
    return text.Substring(0, index).ToUpper() + text.Substring(index); 
} 

一個更廣義的方法可以是這個樣子:

public static string ToUpperUntilNthOccurrenceOfChar(string text, char c, int occurrences) 
{ 
    if (occurrences > text.Count(x => x == c)) 
    { 
     return text.ToUpper(); 
    } 

    int index = 0; 
    for (int i = 0; i < occurrences; i++, index++) 
    { 
     index = text.IndexOf(c, index); 
    } 
    return text.Substring(0, index).ToUpper() + text.Substring(index); 
} 
相關問題