2017-04-06 1 views
0

Ich importiere eine Textdatei in eine Zeichenfolge und anschließend ich es in ein Char-Array mit Stringbuilder, aber mein Problem ist, dass Newline auch eingefügt wird das Char-Array. Wenn ich dieses n verwende, dann ist das Element, das auf Index 21 sein sollte, auf Index 22, und wenn ich Environment.NewLine verwende, dann wird das Element, das auf Index 21 sein sollte, auf Index 23 sein und dasselbe gilt für AppendLine(). . Ich fügte übrigens ein Bild hinzu, wie das Ausgabefenster aussieht wie labyrinthOutput. Wie erstelle ich eine neue Zeile, aber ohne sie in das Char-Array zu platzieren? Mein Code sieht wie folgt aus:Wie vermeide ich, eine Newline in meine Char-Array mit Stringbuilder

using System; 
using System.Collections.Generic; 

using System.Linq; 

using System.Text; 

using System.IO; 

using System.Threading.Tasks; 


namespace ConsoleApplication25 

{ 
class Program 


{ 

    static char[] FloridaArray; 
    static string DenverString; 

    static void Main(string[] args) 
    { 
     //Increase Console Buffer Height 
     Console.BufferHeight = Int16.MaxValue - 1; 

     DenverString = ConvertStringArrayToString(); 
     FloridaArray = DenverString.ToArray(); 
     Console.WriteLine(DenverString); 
     Console.WriteLine(FloridaArray[43]); 
     for (int i = 0; i < FloridaArray.Length; i++) 
     { 
      // Get character from array. 
      char letter = FloridaArray[i]; 
      // Display each letter. 
      Console.Write(i + " Letter: "); 
      Console.WriteLine(letter); 
     } 
    } 

    static string ConvertStringArrayToString() 
    { 
     // Concatenate all the elements into a StringBuilder. 
     StringBuilder builder = new StringBuilder(); 
     foreach (var value in File.ReadAllLines("Labyrint.txt", Encoding.UTF8).Skip(1)) 
     { 


      builder.Append(value); 

      builder.Append('\n'); 

      //builder.Append(Environment.NewLine); 
      //builder.AppendLine(); 
      //builder.Append("\r\n"); 
      //builder.Append("\r"); 




     } 

     return builder.ToString(); 

    } 
} 


} 

output

labyrinth

+0

Wollen Sie sagen, dass Sie die gesamte Datei in eine Zeichenfolge ohne Zeilenvorschubzeichen lesen möchten? –

Antwort

0

Ich bin nicht sicher, was Sie fragen. Es scheint, als ob Sie beide einen Zeilenumbruch wünschen und nicht wollen. Wenn Sie einen Zeilenumbruch ausgeben möchten, können Sie dies manuell mit Console.Write() tun, und fügen Sie Ihren Zeichenobjekten/Arrays einfach keine Zeilenumbrüche hinzu. \ n und Environment.Newline können sich in der Zeichenlänge unterscheiden, weil \ n der Zeilenabschluss für Unix-Systeme und \ r \ n für Windows ist. Sie können eine

String.Split() 

tun, wenn Sie jemals Zeilenumbrüche aus einer Zeichenkette wollen abzustreifen, aber das gibt ein Array von substings, von denen einige leer sein, aber das gibt Ihnen mehr Flexibilität. Was Sie eher wollen, ist

String.Trim() 

, die auch effektiv und wahrscheinlich ein direkter Ansatz ist. Es entfernt alle Zeichen vom Anfang einer Zeichenfolge, die Leerzeichen klassifiziert sind (newls unter ihnen), und dasselbe vom Ende zurück, was bedeutet, dass interne Leerzeichen beibehalten werden. Bitte klären Sie, ob Sie Zeilenumbrüche in Ihren Datenstrukturen oder nur Ihre Ausgabe wünschen.

EDIT:

//FloridaArray exists as char array with newlines 

///make vector that can hold florida char elements without resize 
List<char> tempFloridaCharList = new List<char>(FloridaArray.Length) 
//declare container for florida characters minus newline 
char[] newlinelessFloridaArray; 

foreach(char i in FloridaArray) 
{ 
    if(i== '\r' || i== '\n') 
     continue; 
    tempFloridaCharList.Add(i); 
} 
//you now have all characters that arent newline from FLorida array 
in a list which you can immediately convert to an array. 
newlinelessFloridaArray = tempFloridaCharList.ToArray(); 
//if you dont need the old florida array with \n anymore, you can say: 
FloridaArray = tempFloridaCharList.ToArray(); 

//When youre happy, clear the tempCharList so it can be used again 
tempFloridaCharList.Clear(); 
+0

Wie die anderen bin ich mir nicht sicher, was Sie erreichen wollen. Versuchen Sie, builder.Append (Wert) zu ersetzen; mit builder.Append (value.Trim()); und entferne die Zeile danach. – JimmyJames

+0

Ich denke, der Schlüssel ist, dass ich eine if-Anweisung in der for-Schleife sage, wenn (FloridaArray [i]! = '\ N') {setze Elemente aus FloridaArray in char Buchstaben} else {do ​​nothing} Und dann i ++ bei der Ende der if-Anweisung? Wie würde dieser Pseudo-Code in C# aussehen? – cop77

+0

@ cop77 Ich habe einen Vorschlag hinzugefügt, wie Sie Ihr vorhandenes char-Array mit Zeilenumbrüchen kombinieren und eins mit allen Zeichen in Originalreihenfolge abzüglich der Zeilenumbrüche erstellen können. Lass es mich wissen, wenn es hilfreich ist – schulmaster

0

löste ich das Problem. Ich habe einfach das Array ohne \ n in eine Liste übertragen. Der Code ist unten zu finden.

using System; 
using System.Collections.Generic; 

using System.Linq; 

using System.Text; 

using System.IO; 

using System.Threading.Tasks; 

namespace ConsoleApplication25 
{ 

class Program 


{ 

    static char[] FloridaArray; 

    static string DenverString; 
    static List<string> wrd = new List<string>(); 

    static void Main(string[] args) 
    { 
     //Increase Console Buffer Height 
     Console.BufferHeight = Int16.MaxValue - 1; 

     DenverString = ConvertStringArrayToString(); 



     FloridaArray = DenverString.ToArray(); 

     Console.WriteLine(DenverString); 

     for (int i = 0; i < DenverString.Length; i++) 
     { 

      if (FloridaArray[i] != '\n') 
      { 

       wrd.Add(FloridaArray[i].ToString()); 
       // Get character from array. 
       char letter = FloridaArray[i]; 
       // Display each letter. 
       //Console.Write(i + " Letter: "); 
       //Console.WriteLine(letter); 

       } 
     } 
     foreach (String o in wrd) 
     { 
      Console.WriteLine(o); 
     } 
     Console.WriteLine(wrd[21]); 

    } 

    static string ConvertStringArrayToString() 
    { 
     // Concatenate all the elements into a StringBuilder. 
     StringBuilder builder = new StringBuilder(); 
     foreach (var value in File.ReadAllLines("Labyrint.txt", Encoding.UTF8).Skip(1)) 
     { 


      builder.Append(value); 

      builder.Append('\n'); 

      //builder.Append(Environment.NewLine); 
      //builder.AppendLine(); 
      //builder.Append("\r\n"); 
      //builder.Append("\r"); 




     } 

     return builder.ToString(); 

    } 
} 
} 
Verwandte Themen