如何使用stringbuilder

时间:2017-04-06 01:28:15

标签: c# arrays newline stringbuilder environment

我正在将一个文本文件导入到一个字符串中,之后我使用stringbuilder将它设置为一个char数组,但我的问题是newline也被插入到char数组中。如果我使用这个n \那么应该在索引21上的元素将在索引22上,如果我使用Environment.NewLine,那么应该在索引21上的元素将在索引23上,并且与AppendLine()相同。顺便提一下,我添加了一个输出窗口如何labyrinth Output的图像。如何创建新行但不将其放在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

2 个答案:

答案 0 :(得分:0)

我不确定你在问什么。好像你们都想要并且不想换行。如果要输出换行符,可以使用Console.Write()手动完成,并且不需要为字符对象/数组添加换行符。 \ n和Environment.Newline的字符长度不同,因为\ n是Unix系统的行终止符,\ r \ n是Windows的行终止符。你可以做一个

String.Split() 

如果您想从字符串中删除换行符,但是返回一个子换行数组,其中一些可能是空的,但这会给您更多的灵活性。你更有可能想要的是

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

答案 1 :(得分: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();

    }
}
 }