我遇到包含加号(+)的字符串的问题。 我想分割那个字符串(或者如果有其他方法来解决我的问题)
string ColumnPlusLevel = "+-J10+-J10+-J10+-J10+-J10";
string strpluslevel = "";
strpluslevel = ColumnPlusLevel;
string[] strpluslevel_lines = Regex.Split(strpluslevel, "+");
foreach (string line in strpluslevel_lines)
{
MessageBox.Show(line);
strpluslevel_summa = strpluslevel_summa + line;
}
MessageBox.Show(strpluslevel_summa, "summa sumarum");
MessageBox用于我的测试目的。
现在...... ColumnPlusLevel字符串可以有非常多样的条目,但它始终是以加号开头的重复模式。 例如,“+ MJ + MJ + MJ”或“+ PPL14.1 + PPL14.1 + PPL14.1”。 (它来自另一个软件,我无法编辑该软件的输出)
如何找出重复的模式? 在这个例子中,这是+ -J10或+ MJ或+ PPL14.1
在上面的例子中,我通过仅使用MessageBox来测试它,但我希望稍后将重复的模式存储在字符串中。
也许我使用Split做错了,也许有另一个解决方案。 也许我以错误的方式使用Split。
希望您了解我的问题和我想要的结果。
感谢您的任何建议。
/托马斯
答案 0 :(得分:5)
如何找出正在重复的模式?
也许我完全不理解这个要求,但是并不容易:
string[] tokens = ColumnPlusLevel.Split(new[]{'+'}, StringSplitOptions.RemoveEmptyEntries);
string first = tokens[0];
bool repeatingPattern = tokens.Skip(1).All(s => s == first);
如果repeatingPattern
为true
,您就知道该模式本身为first
。
你能否解释逻辑是如何运作的?
包含tokens.Skip(1)
的行是LINQ查询,因此您需要在代码文件的顶部添加using System.Linq
。由于tokens
是实现string[]
的{{1}},因此您可以使用任何LINQ(扩展名)方法。 IEnumerable<string>
将跳过第一个,因为我已将其存储在变量中,并且我想知道所有其他是否相同。因此,我使用Enumerable.Skip(1)
只要一个项目与条件不匹配就返回All
(因此一个字符串与第一个字符串不同)。如果全部相同,则您知道存在重复模式,该模式已存储在变量false
中。
答案 1 :(得分:1)
您应该使用String.Split功能:
$ awk -v seed=$RANDOM ' # get some randomness from shell
function cmp_randomize(i1, v1, i2, v2) { # random for traversal function
return (2 - 4 * rand()) # from 12.2.1 Controlling Array Traversal
} # of Gnu awk docs
BEGIN {
srand(seed) # use the seed, Luke
PROCINFO["sorted_in"]="cmp_randomize" # use above defined function
}
/^[^>]/ { # if starts with anything but >
split($0,a,"") # split to hash a
for(i in a) # iterate a in random order
printf "%s", a[i] # output
print "" # newline
next # next record
}1' file # output > starting records
>line1
CAB
>line2
DFE
>line3
GIH
>line4
LKJ
答案 2 :(得分:0)
...但它始终是以加号开头的重复模式。
如果模式总是只重复自己,为什么你甚至需要String.Split()?
string input = @"+MJ+MJ+MJ";
int indexOfSecondPlus = input.IndexOf('+', 1);
string pattern = input.Remove(indexOfSecondPlus, input.Length - indexOfSecondPlus);
//pattern is now "+MJ"
无需字符串拆分,无需使用LinQ
答案 3 :(得分:0)
String
有一个名为Split
的方法,可让您根据给定的字符/字符集拆分/分割字符串:
string givenString = "+-J10+-J10+-J10+-J10+-J10"'
string SplittedString = givenString.Split("+")[0] ///Here + is the character based on which the string would be splitted and 0 is the index number
string result = SplittedString.Replace("-","") //The mothod REPLACE replaces the given string with a targeted string,i added this so that you can get the numbers only from the string