2017-10-10 69 views
-2

我需要能夠能夠打破一個字符串,並得到字符串像這樣的每個部分:我需要能夠能夠提取字符串的一部分來獲得其他字符串

例:「C:\Program Files (x86)\Mozilla Firefox\dictionaries 「(我開始用這個)

(和我得到這四)

"/C:" 
"/C:/Program Files (x86)" 
"/C:/Program Files (x86)/Mozilla Firefox" 
"/C:/Program Files (x86)/Mozilla Firefox/dictionaries" 

我正在開發中4Test,你可能不熟悉,但只要那裏有沒有功能內置的代碼我可以在這裏重現它。我熟悉c#

編輯****對不起,在每個新再生的字符串前面都有一個斜槓。有可能得到一個不涉及String.Split的解決方案,因爲它在我使用的語言中是不可用的,由於我使用的腳本語言的普及程度低,我只是在c#中詢問了一個沒有內置函數的解決方案。

+1

[String.Split()](https://msdn.microsoft.com/en-us/library/b873y76a(V = vs.110)的.aspx)以 '/'作爲分隔符會給你一個4串的數組。那些你可以以任何順序連接。 –

+1

爲什麼你有時需要在字符串的開頭有一個斜槓字符,有時候不需要,有時需要斜槓字符替換反斜槓?請注意,反斜槓是字符串元字符,「C:\ Program Files(x86)\ Mozilla Firefox \ dictionaries」不是C#字符串。 –

+0

我編輯的主要帖子,應該是每個轉載的字符串前面的斜槓 – HarryDoe

回答

0

目前尚不清楚結果中應該包含多少和哪種類型的斜槓(向前或向後)。我認爲這並不重要。

解決方案:

public List<string> Split(string path) 
    { 
     var folders = path.Split(new[] {"\\", ":\\" }, StringSplitOptions.None); 
     var result = new List<string>(); 
     for (var i = 0; i <= folders.Length - 1; i++) 
     { 
      var subPath = string.Empty; 
      for (var j = 0; j <= i; j++) 
      { 
       subPath += folders[j]; 
       if (j == 0) 
        subPath += ":\\"; 
       else 
        subPath += "\\"; 
      } 

      result.Add(subPath); 
     } 

     return result; 
    } 
+0

這將打印列表 – HarryDoe

+0

@HarryDoe重複。不,您可以運行並檢查。 – Valerii

0

你可以循環遍歷字符串中的字符,並建立緩衝區,當您去。每次點擊分隔符時,都會將當前緩衝區添加到結果列表中。中最佳可見的代碼:

using System; 
using System.Collections.Generic; 

namespace SplitString 
{ 
    class Program 
    { 
     public static List<string> GetStrings(string input, char delimiter, string prefix) 
     { 
      // Pre-load buffer with prefix 
      string buffer = prefix; 
      List<string> result = new List<string>(); 

      foreach (var c in input) 
      { 
       if (c == delimiter) 
       { 
        // We have hit a delimeter so we have a result 
        result.Add(buffer); 
        buffer += prefix; 
       } 
       else 
       { 
        buffer += c; 
       } 
      } 
      // At end of string need to add last result 
      result.Add(buffer); 
      return result; 
     } 

     static void Main(string[] args) 
     { 
      var strings = GetStrings(@"C:\Program Files(x86)\Mozilla Firefox\dictionaries ", '\\', "/"); 
      foreach (var s in strings) 
      { 
       Console.Out.WriteLine(s); 
      } 
     } 
    } 
}