2017-10-10 17 views
-2

を取得するには、文字列の部分を抽出することができるようにする必要があります:私は、文字列を分解し、そのような文字列の各部分を取得することができることができるようにする必要があり、他の文字列

例: "C:\Program Files (x86)\Mozilla Firefox\dictionaries 「(私はこれを起動します)

(と私はこれら4を得る)

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

私は4Testに開発していますし、あなたがいる限りtheresのがノーコード内の関数に建てられたとして、それに精通しているではないかもしれません私はここでそれを再現することができます。私はよく知っている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); 
      } 
     } 
    } 
} 
関連する問題