2016-06-17 99 views
3

我上面有一個例子。如何將條目中的項目拆分爲兩個項目?

有無陣列,如:

array[0] = TODO 06:15PMJoin Michael 
array[1] = WakeUp 
array[2] = Going to schools 

我希望它成爲像:

array[0] = TODO 06:15PM 
array[1] = Join Michael 
array[2] = WakeUp 
array[3] = Going to schools 

在這個例子中,我分裂項目有內容TODO 06:15PMJoin Michael新的2項。

這裏有兩個獨立的問題:

如何創建數組中創建一個新項目的作用?

我試着與我的代碼:

var splitList = words.SelectMany(x => x.Contains("AM") || x.Contains("PM"))

但我不知道如何從文本AMPM拆分到新的項目中arrays

+0

也許子串容易做到這一點? – Kason

+0

確切知道字符串的長度時,使用'SubString'需要拆分。 在我的情況下,'array'從IList 獲取值。數組[0]的值是隨機的。它只有'AM'或'PM'是角色。 – vanloc

+1

IndexOf可以幫助您找到索引。 – Kason

回答

5

你可以嘗試尋找AM/PM並獲得子:

String[] array = new String[] { 
    "TODO 06:15PMJoin Michael", 
    "WakeUp", 
    "Going to schools" 
    }; 

    var result = array 
    .SelectMany(line => { 
     int p = line.IndexOf("AM"); 

     if (p >= 0) 
      return new String[] { 
      line.Substring(0, p + "AM".Length), 
      line.Substring(p + "AM".Length) }; 

     p = line.IndexOf("PM"); 

     if (p >= 0) 
      return new String[] { 
      line.Substring(0, p + "PM".Length), 
      line.Substring(p + "PM".Length) }; 

     return new String[] { line }; 
     } 
    ); 
    //.ToArray(); // if you want to have array representation 

    // Test 
    Console.Write(String.Join(Environment.NewLine, result)); 
+0

你真棒。你的答案解決了我的問題。非常感謝你。 – vanloc

+0

@VănLộc:不客氣! –

+0

我的數組有問題。我的數組是'word [6]'有6個項目。我想'詞[0]'分裂新的兩個項目,並添加存在的項目。 (x =>!string.IsNullOrEmpty(x))。ToArray();'但是這段代碼會刪除存在的項目並創建2個項目的新陣列。 – vanloc

1

你也可以試試這個:

string[] array = new string[] {"TODO 06:15PMJoin Michael", 
    "WakeUp", 
    "Going to schools"}; 

string[] SplitArray(string[] array) 
{ 
    List<string> returnArray = new List<string>(); 

    foreach (string item in array) 
    { 
     int index = GetIndex(item); 
     if (index >= 0) 
     { 
      string s1 = item.Substring(0, index + 2); 
      string s2 = item.Substring(index + 2); 
      returnArray.Add(s1); 
      returnArray.Add(s2); 
     } 
     else 
     { 
      returnArray.Add(item); 
     } 
    } 

    return returnArray.ToArray(); 
} 

int GetIndex(string s) 
{ 
    int index = GetIndexOf(s, "AM"); 

    if (index == -1) 
    { 
     index = GetIndexOf(s, "PM"); 
    } 

    return index; 
} 

int GetIndexOf(string s, string delim) 
{ 
    int index = -1; 

    int tempIndex = 0; 
    do 
    { 
     tempIndex = s.IndexOf(delim, tempIndex); 
     if (tempIndex > 0) 
     { 
      if (char.IsDigit(s[tempIndex-1])) 
      { 
       index = tempIndex; 
       break; 
      } 
     } 
    } 
    while(tempIndex >= 0); 

    return index; 
} 
+0

我不測試你的代碼。但似乎你也回答正確。 – vanloc