2017-04-06 1 views
0

문자열에 텍스트 파일을 가져오고 나중에 stringbuilder를 사용하여 char 배열로 설정하지만 내 문제는 개행도 삽입된다는 것입니다. char 배열 이 n \를 사용하면 인덱스 21에 있어야하는 요소가 인덱스 22에 있고 Environment.NewLine을 사용하면 인덱스 21에 있어야하는 요소는 인덱스 23에 있고 AppendLine()과 함께 사용됩니다. . 나는 출력 창이 어떻게 보이는지에 대한 이미지를 추가했다. labyrinthOutput. 새 줄을 char 배열에 두지 않고 어떻게 만듭니 까? 내 코드는 다음과 같습니다stringbuilder를 사용하여 char 배열에 개행을 삽입하는 것을 피하는 방법

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

줄 바꿈 문자없이 전체 파일을 문자열로 읽고 싶습니까? –

답변

0

난 당신이 요구하는지 모르겠어요. 마치 둘 다 개행을 원하고 원하지 않는 것처럼 보입니다. 개행을 출력하고 싶다면, Console.Write()를 사용하여 수동으로 할 수 있으며, 문자 객체/배열에 개행을 추가하지 않아도됩니다. \ n 및 Environment.Newline은 문자 길이가 다를 수 있습니다. \ n은 Unix 시스템의 줄 종결 자이고 \ r \ n은 Windows의 줄 종결 자이기 때문입니다. 혹시 문자열에서 줄 바꿈을 제거하려는 경우는

String.Split() 

을 할 수 있지만이 비어있을 수 있습니다 일부 substings의 배열을 반환하지만, 당신에게 더 많은 유연성을 제공한다. 당신이 더 원하는 것은

String.Trim() 

입니다. 이것은 또한 효과적이고 아마 더 직접적인 접근법입니다. 공백으로 분류 된 문자열의 시작 부분부터 모든 문자를 제거합니다 (그 중 newls). 끝의 뒤에서도 공백 문자가 보존됩니다. 데이터 구조에 개행을 사용할지 또는 출력에만 사용 할지를 명확히하십시오.

편집 :

//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

다른 사람들처럼 나는 당신이 성취하려는 것을 확신하지 못합니다. builder.Append (value)를 바꿔보십시오. builder.Append (value.Trim()); 그 뒤에 줄을 제거하십시오. – JimmyJames

+0

나는 열쇠가 for 루프를 if 문으로 만드는 것이라고 생각한다. (FloridaArray [i]! = '\ n') {FloridaArray의 원소를 char 문자로 옮긴다} else {do ​​nothing} 그리고 나서 나는 ++에서 if 문의 끝? 그 의사 코드는 어떻게 C#처럼 보이겠습니까? – cop77

+0

@ cop77 기존의 문자 배열을 개행 문자로 가져 오는 방법에 대한 제안을 추가하고 원래 순서대로 모든 문자와 개행을 뺀 문자를 생성하는 방법에 대한 제안을 추가했습니다. 도움이되는지 알려주세요. – schulmaster

0

나는이 문제를 해결했다. 나는 방금 배열을 \ n없이리스트로 옮겼다. 코드는 아래에 있습니다.

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(); 

    } 
} 
} 
관련 문제