-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# 中提供解决方案。

4

2 回答 2

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);
            }
        }
    }
}
于 2017-11-13T11:09:06.573 回答
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;
    }
于 2017-10-11T00:31:58.583 回答