簡體   English   中英

從字符串中提取

[英]Extracting from string

我有一個非常復雜的字符串需要提取。

字符串- !0A!0B!0C @0A@0B@0B

我想為每個人閱讀! 並將它們提取為3的集合,表示!0A!0B!0C ,然后我計划使用select case讀取它們,因為它們每個都代表某種含義(select case會好嗎?)

以及如何在3秒內提取它們

我會使用正則表達式。 例如這樣:

Dim str As String = "!0A!0B!0C"
    Dim ptr As String = "[!][A-Z0-9]{2}"

    Dim matches As MatchCollection = Regex.Matches(str, ptr)

    For Each m In matches
        Console.WriteLine(m.ToString())
    Next

抱歉,該示例在VB中,但您從中得到了靈感。

這種方法應該可以解決問題。 發送您的字符串,結果列表將會出來:

public List<string> StringParser( string s ){
  var list = new List<string>();
  for( int i = 0; i < s.Length; i++ ){
    if( s[i] == '!' ){
      list.Add(s.Substring(i,3));
      i+= 2;
    }
  }
  return list;
}

請注意,如果字符串包含!,這將失敗。 后面至少沒有其他兩個字符,因此您可能應該在實際運行substring命令之前進行測試以驗證這一點。

如果必須在代碼中的許多地方執行此操作,則可以創建一個奇特的擴展方法:

static class StringExtensions {
  public static IEnumerable<String> SplitInParts(this String s, Int32 partLength) {
    if (s == null)
      throw new ArgumentNullException("s");
    if (partLength <= 0)
      throw new ArgumentException("Part length has to be positive.", "partLength");
    for (var i = 0; i < s.Length; i += partLength)
      yield return s.Substring(i, Math.Min(partLength, s.Length - i));
  }
}

然后可以像這樣使用它:

var parts = "!0A!0B!0C @0A@0B@0B".SplitInParts(3);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM