我已经对许多问题进行了筛选,但没有找到能够为我解答的问题。
string input = "~abc~~~123~~~hijkl~9";
string[] postSplit = input.Split('~');
我看到的回应是:
[0] - ""
[1] - " ABC"
[2] - ""
[3] - ""
[4] - " 123"
...
注意" abc"之间只有2个条目。和" 123"虽然有3个分隔符。
注意:我已经使用string.split和regex.split方法尝试了相同的结果。
如何确保无论顺序分隔符的数量是多少,我都会得到一个数组条目。 (" abc"" 123")之间的3个条目
提前致谢。
更新:
UPDATE2:此场景中的波浪号表示字段的分隔符或从未放入字符串的空值。 ~a~b只是a和b之间的分隔符,但~~~~ c表示分隔符,空值,分隔符c
UPDATE3:
~~~表示数组中的~~~ c [a] [""] [c] 〜表示数组中的〜b [a] [b] 在有效输入
之间仅出现1和3的波形的倍数a ~~~~~~~~~ b应该等同于[a] [""] [""] [""]并[b]
答案 0 :(得分:3)
注意:我写过another somewhat more helpful answer应该做你想做的事。
string.Split
本身不适合解决您的问题,因为这是它的工作原理:
假设您将字符串"A,B"
与','
分开作为分隔符。您将获得部分"A"
和"B"
。 一个分隔符,零空零件。
现在让我们再次将"A,,B"
拆分为','
作为分隔符。您将获得部分"A"
,""
和"B"
。 两个分隔符,一个空白部分。
然后让我们再次将"A,,,B"
拆分为','
作为分隔符。您将获得部分"A"
,""
,""
和"B"
。 三个分隔符,两个空白部分。
一般规则是: n 连续分隔符会产生 n-1 空白部分。
也许现在你可以看到为什么~~~
只产生两个空部分,而不是三个。
(如果您愿意使用string.Split
以外的字符串方法,那么我的答案肯定不是很有帮助。)
答案 1 :(得分:2)
注意:此答案仅针对"更新"之前的问题部分。段落,因为它是在编辑问题之前编写的。
string.Split
将为 n 连续的分隔符字符生成 n-1 个空白部分。因为你希望它能够生成 n 空的部分,所以只要它们中的几个连续出现,你就会变得很短。添加"缺失"在执行Split
:
// using System.Text.RegularExpressions;
const string input = "~abc~~~123~~~hijkl~9";
string[] parts = Regex.Replace(input, "~~+", "$0~").Split('~');
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
答案 2 :(得分:0)
答案 3 :(得分:0)
添加到@Amnon Shocot ......
string input = "~abc~~~123~~~hijkl~9";
var postSplit = input.Split(new char[] {'~'}, StringSplitOptions.RemoveEmptyEntries);
var postSplit2 = input.Split('~').Where(ss => ss != String.Empty);
使用regurlar表达式,遗憾的是我们仍然需要过滤掉空字符串,因为第一次匹配。
Regex rr = new Regex("~+"); // you may have been missing the +
var postSplit3 = rr.Split(input).Where(ss => ss != String.Empty);
答案 4 :(得分:-1)
在vb:
Dim input As String = "~abc~~~123~~~hijkl~9"
Dim post() As String = input.Split({"~"c}, 3, StringSplitOptions.RemoveEmptyEntries)
看起来#3的余数包括~9
Dim input As String = "~abc~~~123~~~hijkl~9".Replace("~~~", "~na~")
If input.StartsWith("~") Then input = "na" & input
If input.EndsWith("~~") Then input &= "~na"
Dim post() As String = input.Split({"~"c})
这适用于示例字符串,但如果相邻字段包含占位符,则会变得更复杂。你可能不得不一次迭代替换的字符串,直到字符串长度不变。