2012-03-08 120 views
0

好了,所以我的代碼看起來有點像這樣某些字符選擇字符,直到在C#中的某些字符

 // Returns the note of a favorite pown if it exists 
     string GetFavoriteNote(int id) 
     { 
      string notelist = Properties.Settings.Default.FavoriteNotesList; 

      // If there's a note, return it 
      if (notelist.Contains("'" + id + ":")) 
      { 
       // What to do here? 
      } 
      // If there's no note, return an empty string 
      else 
      { 
       return String.Empty; 
      } 
     } 

現在它基本上是一個系統,其中每個ID用戶可以設置一個音符,它將被保存在這種格式:'id:note','id:note'

現在我要做的就是選擇一個音符不知何故並返回,所以我不得不從"'" + id + ":"喜歡選擇直到「

如果有人知道如何做到這一點,請幫幫我。 感謝

+0

您可以按','拆分,然後按':'拆分,然後您就可以得到筆記。或者你可以使用正則表達式。 – arunes 2012-03-08 09:16:40

+0

你想要整個筆記結構(id = text)還是僅僅是筆記的文本部分? – 2012-03-08 09:29:47

回答

4

使用正則表達式似乎是最乾淨的方法對我說:

string regexFormat = "'{0}:(.*?)'"; 
Match match = Regex.Match(notelist, string.Format(regexFormat, id)); 
return match.Success ? match.Groups[1].Value : string.Empty; 

或者然而,你可以使用字符串分割:

var notes = notelist.Split(','); 
var idString = "'" + id + ":"; 
var note = notes.FirstOrDefault(n => n.StartsWith(idString)); 
if (note == null) return string.Empty; 
return note.Substring(idString.Length, note.Length - (idString.Length + 1)); 
+0

我不知道你做了什麼,但它的工作,謝謝^^ – user1071461 2012-03-08 09:29:02

+0

@ user1071461:我會_strongly_建議不要使用你不明白的代碼。 – 2012-03-08 09:55:46

0
notelist.Substring(notelist.IndexOf("'" + id + ":"), (notelist.IndexOf("'") - notelist.IndexOf("'" + id + ":"))); 

這應該做的伎倆,你可以選擇文本由子到一個新的字符串。 substring(startindex,lenght);

+1

ID會爲每個音符更改,並且可以有多個,這個工作怎麼樣? – 2012-03-08 09:21:07

+0

它沒有工作,但無論如何謝謝 – user1071461 2012-03-08 09:29:26

+0

我的代碼示例將返回一個字符串,DIT你放在另一個字符串 – middelpat 2012-03-08 09:32:41

1

嘗試

int StartIndex = notelist.IndexOf("'" + id.ToString() + ":"); 
string result = string.Empty; 
if (StartIndex >= 0) 
{ 
    string tempstr = notelist.SubString (StartIndex + ("'" + id.ToString() + ":").Length); 
    result = tempstr.SubString (0, tempstr.IndexOf ("'")); 
} 

return result; 
1

據我瞭解你的代碼,下面的代碼會給你一個解決方案

  string IdWithNote = string.Empty; 
      string noteList = Properties.Settings.Default.FavoriteNotesList;//your string type note list 
      List<string> listNote = new List<string>();//newly created string type collection 
      listNote=noteList.Split(',').ToList<string>(); 

      int index=listNote.IndexOf("'" + id + ":"); 
      if (index > -1) 
       IdWithNote = listNote[index]; 
      return IdWithNote; 
1

舊fashoned &明確(無正則表達式)此外,假設您只需要筆記的文本,而不是整個筆記結構。

string key = "'" + id + ":"; 
int noteStart = noteList.IndexOf(key); 
if (noteStart >= 0) 
{ 
    int textStart = noteStart + key.Length; 
    int textEnd = noteList.IndexOf("'", textStart); 
    return noteList.Substring(textStart, textEnd - textStart); 
} 
return ""; 
0
var myId=2; 
var t="'1:note1','2:note2'"; 
var query = t.Split(',').Select(c => c.Replace("'", "").Split(':')). 
         Where(c => c[0] == myId.ToString()). 
         Select(p=>p[1]).First(); 

enter image description here

0

下面是一些代碼 - 你真的想要的路線是:retVal的= noteList.Substring(的startIndex,endIndex的 - 的startIndex);

 int id = 8; 
     string noteList = "'8:the note i want','81:the note i do not want'"; 
     string toFind = "'" + id.ToString() + ":"; 
     int startIndex = noteList.IndexOf(toFind) + toFind.Length; 
     int endIndex = noteList.IndexOf("'", startIndex); 
     if (noteList.Contains(toFind)) 
     { 
      retVal = noteList.Substring(startIndex, endIndex - startIndex); 
     } 
     else 
     { 
      retVal = "nothing found"; 
     } 
+0

僅供參考:'string toFind =「'」+ id.ToString()+「:」;'你不需要ToString,'string toFind =「'」+ id +「:」;'會編譯成相同事情。 – 2012-03-08 09:57:14

+0

如果不是過分昂貴,我總是喜歡更具表現力和明確性。但是,謝謝你,我不知道它會編譯成同樣的東西(我知道它會編譯只是不知道它會是完全一樣的東西)。 – 2012-03-08 10:21:19