Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串的一部分放入数组中_C#_Arrays_String_Split_Calc - Fatal编程技术网

C# 将字符串的一部分放入数组中

C# 将字符串的一部分放入数组中,c#,arrays,string,split,calc,C#,Arrays,String,Split,Calc,我有以下问题: 我想将字符串的一部分放入数组中。到目前为止没有问题(拆分字符串), 但是,我不能使用splitstring,因为它会去掉运算符 举例说明: 以下字符串:“47-62*5141” 我需要这样:{“47”、“-”、“62”、“*”、“5141”} 如果你能给我一个代码示例,我将非常高兴 只需根据位于中间的单词边界进行拆分即可 Regex.Split(string, @"(?!^)\b(?!$)"); 我做了一个小小的丑代码。但它是有效的 class Program { st

我有以下问题:

我想将字符串的一部分放入数组中。到目前为止没有问题(拆分字符串), 但是,我不能使用
splitstring
,因为它会去掉运算符

举例说明:
以下字符串:
“47-62*5141”

我需要这样:
{“47”、“-”、“62”、“*”、“5141”}


如果你能给我一个代码示例,我将非常高兴

只需根据位于中间的单词边界进行拆分即可

Regex.Split(string, @"(?!^)\b(?!$)");

我做了一个小小的丑代码。但它是有效的

class Program
{
    static void Main(string[] args)
    {
        var text = "47-62**5141";

        var splittedText = text.SplitAndKeepSeparator('-', '*');

        foreach (var part in splittedText)
        {
            Console.WriteLine(part);
        }
        Console.ReadLine();
    }

}

public static class StringExtensions
{
    public static IEnumerable<string> SplitAndKeepSeparator(this string s, params char[] seperators)
    {
        var parts = s.Split(seperators, StringSplitOptions.None);

        var partIndex = 0;
        var isPart = true;
        var indexInText = 0;
        while (partIndex < parts.Length)
        {
            if (isPart)
            {
                var partToReturn = parts[partIndex];

                if (string.IsNullOrEmpty(partToReturn))
                {
                    partToReturn = s[indexInText].ToString();
                }
                else
                {
                    isPart = false;
                }
                indexInText += partToReturn.Length;
                partIndex++;

                yield return partToReturn;
            }
            else
            {
                var currentSeparator = s[indexInText];
                indexInText++;
                isPart = true;
                yield return currentSeparator.ToString();
            }
        }
    }
类程序
{
静态void Main(字符串[]参数)
{
var text=“47-62**5141”;
var splittedText=text.SplitAndKeepSeparator('-','*');
foreach(拆分文本中的变量部分)
{
控制台写入线(部分);
}
Console.ReadLine();
}
}
公共静态类扩展
{
公共静态IEnumerable SplitAndKeepSeparator(此字符串为s,参数为char[]分隔符)
{
var parts=s.Split(分隔符、StringSplitOptions.None);
var partIndex=0;
var isPart=true;
var indexInText=0;
while(partIndex<零件长度)
{
如果(isPart)
{
var partToReturn=零件[partIndex];
if(string.IsNullOrEmpty(partToReturn))
{
partToReturn=s[indexInText].ToString();
}
其他的
{
isPart=false;
}
indexInText+=零件返回长度;
partIndex++;
使返回零件返回;
}
其他的
{
var currentSeparator=s[indexInText];
indexInText++;
isPart=true;
收益返回currentSeparator.ToString();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串[]部分=新字符串[100];
var text=“47-62*5141”;
int i=0;
var splittedText=text.SplitAndKeepSeparator(“-”、“*”、“+”、“/”);
foreach(拆分文本中的变量部分)
{
第[i]部=第(1)部;
i++;
}
Console.ReadLine();
控制台写入线(第[0]部分);
控制台写入线(第[1]部分);
控制台写入线(第[2]部分);
控制台写入线(第[3]部分);
Console.ReadLine();
}
}
}
公共静态类扩展
{
公共静态IEnumerable SplitAndKeepSeparator(此字符串为s,参数为char[]分隔符)
{
var parts=s.Split(分隔符、StringSplitOptions.None);
var partIndex=0;
var isPart=true;
var indexInText=0;
while(partIndex<零件长度)
{
如果(isPart)
{
var partToReturn=零件[partIndex];
if(string.IsNullOrEmpty(partToReturn))
{
partToReturn=s[indexInText].ToString();
}
其他的
{
isPart=false;
}
indexInText+=零件返回长度;
partIndex++;
使返回零件返回;
}
其他的
{
var currentSeparator=s[indexInText];
indexInText++;
isPart=true;
收益返回currentSeparator.ToString();
}
}
}
}

或匹配单词和非单词字符
@“\w+|\w+”
请显示您迄今为止尝试的内容,添加一些代码片段。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] parts = new string[100];

            var text = "47-62*5141";
            int i = 0;

            var splittedText = text.SplitAndKeepSeparator('-', '*', '+', '/');

            foreach (var part in splittedText)
            {
                    parts[i] = part;
                    i++;

            }
            Console.ReadLine();
            Console.WriteLine(parts[0]);
            Console.WriteLine(parts[1]);
            Console.WriteLine(parts[2]);
            Console.WriteLine(parts[3]);
            Console.ReadLine();
        }
    }
}
public static class StringExtensions
{
    public static IEnumerable<string> SplitAndKeepSeparator(this string s, params char[] seperators)
    {
        var parts = s.Split(seperators, StringSplitOptions.None);

        var partIndex = 0;
        var isPart = true;
        var indexInText = 0;
        while (partIndex < parts.Length)
        {
            if (isPart)
            {
                var partToReturn = parts[partIndex];

                if (string.IsNullOrEmpty(partToReturn))
                {
                    partToReturn = s[indexInText].ToString();
                }
                else
                {
                    isPart = false;
                }
                indexInText += partToReturn.Length;
                partIndex++;

                yield return partToReturn;
            }
            else
            {
                var currentSeparator = s[indexInText];
                indexInText++;
                isPart = true;
                yield return currentSeparator.ToString();
            }
        }
    }
}