我有两个字符串A和B。
string A = @"Hello_
Hello_
Hello_";
string B = @"World
World
World";
我想将这两个字符串与一个函数调用一起添加,如下所示:
string AB = ConcatMultilineString(A, B)
该函数应返回:
@"Hello_World
Hello_World
Hello_World"
对我而言,最好的方法是将字符串分成所有行的数组,然后将所有行加在一起,将所有行与“ \ r \ n”加在一起,然后返回。但这对我来说似乎是不好的做法,因为多行代码并不总是用“ \ r \ n”表示。
有没有一种更可靠的方法?
答案 0 :(得分:2)
对于单行解决方案:
var output = string.Join(System.Environment.NewLine, A.Split('\n')
.Zip(B.Split('\n'), (a,b) => string.Join("", a, b)));
我们对\n
进行了拆分,因为无论是\n\r
还是\n
,它都将包含\n
。剩下的\r
似乎会被忽略,但是如果您觉得安全,可以向Trim
和a
添加一个呼叫到b
。
答案 1 :(得分:0)
Environment.NewLine是与平台无关的替代“ \ r \ n”。
答案 2 :(得分:0)
Environment.NewLine
可能有助于解决“多个行并不总是用"\r\n"
指示”的问题
https://msdn.microsoft.com/de-de/library/system.environment.newline(v=vs.110).aspx
编辑:
如果您不知道是否将多行分隔为"\n"
或"\r\n"
,这可能会有所帮助:
input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
空行被删除。如果您不希望这样做,请使用StringSplitOptions.None
。
答案 3 :(得分:0)
这按您的要求进行:
static string ConcatMultilineString(string a, string b)
{
string splitOn = "\r\n|\r|\n";
string[] p = Regex.Split(a, splitOn);
string[] q = Regex.Split(b, splitOn);
return string.Join("\r\n", p.Zip(q, (u, v) => u + v));
}
static void Main(string[] args)
{
string A = "Hello_\rHello_\r\nHello_";
string B = "World\r\nWorld\nWorld";
Console.WriteLine(ConcatMultilineString(A, B));
Console.ReadLine();
}
输出:
Hello_World
Hello_World
Hello_World
答案 4 :(得分:0)
我认为,如果您要加载从不同平台(Linux + Mac + Windows)创建的字符串,甚至获得包含HTML换行符或任何其他内容的字符串,则通用方法是非常不可能的 我认为您必须自行定义换行符。
string a = getA();
string b = getB();
char[] lineBreakers = {'\r', '\n'};
char replaceWith = '\n';
foreach(string lineBreaker in lineBreakers)
{
a.Replace(lineBreaker, replaceWith);
b.Replace(lineBreaker, replaceWith);
}
string[] as = a.Split(replaceWith);
string[] bs = a.Split(replaceWith);
string newLine = Environment.NewLine;
if(as.Length == bs.Length)
{
return as.Zip(bs (p, q) => $"{p}{q}{newLine }")
}