2016-11-29 5 views
2

Ich versuche, eine Zeichenfolge zu erstellen und unten ist die Sache, die ich zu erreichen bin versucht:Split und kombinieren zwei verschiedene Saiten

String first = "Previous.value1 | Previous.value2"; 
String second = "New.value1| New.value2"; 

ich letzte Zeichenfolge wie folgt zu erstellen versuchen:

string final ="generate Previous.value1 cross New.value1 ? Previous.value1 cross New.value2"; 

Aber Problem ist, wenn ich Mismatch wie unten haben:

String first = "Previous.value1 | Previous.value2"; 
String second = "New.value1"; 

wollen Dann habe ich wie diese haben, weil ich habe nicht passenden Wert für Previous.Value2 in zweite Variable:

string final ="generate Previous.value1 cross New.value1"; 

Bisher bin ich erfolgreich in final String zu erzeugen, wenn i gleiche Anzahl der Wert in beide die Schnur.

string final = "generate"; 
if (first.Split('|').Count() - second.Split('|').Count() == 0) 
{ 
    int i = 0; 
    foreach (var item in first.Split('|').Count()) 
    { 
     if (i == 0) 
      final = final + item + " cross " + second.Split('|')[i]; 
     else 
      final = final + " ? " + item + " cross " + second.Split('|')[index]; 
     i++; 
    } 
} 
+2

Also, was ist das Problem? – PMerlet

+1

if (second.Contains ("|")) {// mach etwas} –

+0

@TimSchmelter: Ich habe meine Frage mit den Änderungen aktualisiert.Sorry –

Antwort

3

Versuchen Sie, diese LINQ-Abfrage (mit the Zip extension method):

var zippedQry = first.Split('|').Zip(second.Split('|'), 
    (f, s) => f.Trim() + " cross " + s.Trim()); 
string final = "generate " + String.Join(" ? ", zippedQry.ToArray()); 
+1

Kannst du Bitte erklären Sie mir Ihren Code am wichtigsten Zip-Funktion, um diese neue Zip-Funktion und ihre Verwendung zu lernen. bitte –

+1

Für Details über die Zip-Funktion, klicken Sie auf den Link, den ich in meinem Beitrag zur Verfügung gestellt habe. Es benötigt grundsätzlich zwei separate Listen (in Ihrem Fall die Split-Strings) und kombiniert diese zu einer Liste mit einem Selektor (in Ihrem Fall wird der Text mit "cross" erstellt). In der zweiten Zeile wird die kombinierte Liste mit einer Zeichenfolge verknüpft. – Sefe

+0

Aber wie verhält sich diese Funktion in diesem Szenario: String first = "Previous.value1 | Previous.value2"; String second = "New.value1";. Können Sie mir diesen Eingang erklären? –

1

im Stil zu bleiben, die Sie verwenden, würde ich zuerst beide Strings

gespalten suggerieren
String first = "Previous.value1 | Previous.value2"; 
String second = "New.value1 | New.value2"; 
string final = "generate "; 

string[] first_values = first.Split('|'); 
string[] second_values = second.Split('|'); 

Dann können Sie Orientiere dich einfach am kürzesten Array. Wenn Sie in der nicht genügend entsprechende Werte für die first_values haben, sammeln Sie nur die entsprechenden. Mit Hilfe eines normalen for-Schleife:

// run until the length of the shortest one 
for (int i = 0; i < Math.Min(first_values.Length, second_values.Length); i++) 
{ 
    // bild the normal cross-version for the first position 
    string sentence = first_values[i] + " cross " + second_values[i]; 
    // if on first position use normal version otherwise put a ? infront of it 
    final += i == 0 ? sentence : " ? " + sentence; 
} 

Diese Schleife wie dies auch String behandeln soll:

String first = "Previous.value1 | Previous.value2 | Previous.value3 | Previous.value4"; 
String second = "New.value1 | New.value2 | New.value3"; 
+0

Vielen Dank für die Antwort und für Ihre freundliche Hilfe :) –

Verwandte Themen