我正在将一个文本文件导入到一个字符串中,之后我使用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();
}
}
}
答案 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();
}
}
}