我正在尝试拆分一个字符串数组,其中每个字符串都有“,”作为分隔符。我使用正则表达式对新行的模式进行了早期拆分后获得了字符串数组。输入来自文本文件,这里是文本文件中的模式。
我的文本文件的内容
"first", "second"
"third", "fourth", "fifth"
"Sixth", "seventh"
第二个文本文件
"Color.auto", "(current == ff) && (current == 00)"
"Color.auto", "(current == ff) ? ((Current > 0) && (current < 10))"
创建在新行字符上分割的字符串数组的代码。
StreamReader sr = new stream reader(file.txt);
String data = sr.ReadToEnd();
String pattern = @"\r\n";
String[] result = regex.split(data, pattern);
foreach(string store in result)
{
String temp = store.split(",".ToCharArray());
}
我面临的问题是我无法将字符串拆分为“,”进一步使用“拆分”。我相信这是由于我试图拆分的字符串数组。
答案 0 :(得分:8)
只需将String.Split与StringSplitOptions参数一起使用:
string[] tokens = data.Split(new char[] { '\r', '\n', ',', ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
这将使用您的单个字符串并根据所有换行符部分以及所有逗号将其拆分。我也投入了空格和制表符,但是如果你不想要它们就可以删除它们。
第二个参数是这样的,你不会得到返回的空标记,例如在'\r'
和'\n'
之间。
编辑根据您的第二个文件,您不希望删除空格,但看起来您可能想要删除引号。在这种情况下,您的行将如下所示。 (我把它分成两行,只是为了让它看起来更整洁。)
char[] delimiters = new char[] { '\r', '\n', ',', '"' };
string[] tokens = data.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
答案 1 :(得分:3)
//Functional style
var tokens = File.ReadLines(file)
.SelectMany(line => line.Split(',')) //split lines on commas
.Select(token => token.Trim(' ')) //remove spaces around tokens
.Select(token => token.Trim('"')); //remove quotes around tokens
//Query style
var tokens = from line in File.ReadLines(file)
from token in line.Split(',')
select token.Trim(' ').Trim('"');
请注意,只有当文件中的引用字符串不包含逗号时,此方法才有效。如果他们这样做,你会想要使用正则表达式。