问题:花费太多时间解决简单问题。哦,这是一个简单的问题。
string inStr
,char delimiter
string[] outStrs
其中string.Join("", outStrs) == inStr
和最后一项之前的outStrs
中的每个项目必须以分隔符结束。如果inStr
以分隔符结尾,则outStrs
中的最后一项也会以分隔符结束。示例1:
"my,string,separated,by,commas"
,','
["my,", "string,", "separated,", "by,", "commas"]
示例2:
"my,string,separated,by,commas,"
,','
["my,", "string,", "separated,", "by,", "commas,"]
(通知尾随逗号)正则表达式解决方案:here
我想避免使用正则表达式,因为这只需要进行字符比较。它在算法上与string.Split()
所做的一样复杂。令我困扰的是,我无法找到一种更简洁的方式来做我想做的事。
我的糟糕解决方案,对我不起作用......它应该更快,更简洁。
var outStr = inStr.Split(new[]{delimiter},
StringSplitOptions.RemoveEmptyEntries)
.Select(x => x + delimiter).ToArray();
if (inStr.Last() != delimiter) {
var lastOutStr = outStr.Last();
outStr[outStr.Length-1] = lastOutStr.Substring(0, lastOutStr.Length-1);
}
答案 0 :(得分:2)
使用LINQ:
string[] output = (input + ',').Split( new[] { "," }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x + ',').ToArray();
将字符串拆分成组,然后通过向其添加逗号来转换不是最后一个元素的每个组。
想到另一种方法可以做到,但我不认为这种方法很清楚:
<button class="btn" onclick="appModel.subscribe()">SUBSCRIBE</button>
<button class="btn" onclick="appModel.unsubscribe()">UNSUBSCRIBE</button>
答案 1 :(得分:0)
如果不使用正则表达式,我似乎很简单:
string inStr = "dasdasdas";
char delimiter = 'A';
string[] result = inStr.Split(new string[] { inStr }, System.StringSplitOptions.RemoveEmptyEntries);
string lastItem = result[result.Length - 1];
int amountOfLoops = lastItem[lastItem.Length - 1] == delimiter ? result.Length - 1 : result.Length - 2;
for (int i = 0; i < amountOfLoops; i++)
{
result[i] += delimiter;
}
答案 2 :(得分:0)
public static IEnumerable<string> SplitAndKeep(this string s, string[] delims)
{
int start = 0, index;
string selectedSeperator = null;
while ((index = s.IndexOfAny(delims, start, out selectedSeperator)) != -1)
{
if (selectedSeperator == null)
continue;
if (index - start > 0)
yield return s.Substring(start, index - start);
yield return s.Substring(index, selectedSeperator.Length);
start = index + selectedSeperator.Length;
}
if (start < s.Length)
{
yield return s.Substring(start);
}
}