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();
}
}
}
}