[英]Adding a character to a string in C#
我對 C# 並不陌生,我一直在使用字符串,但我不明白為什么在這種情況下我不能向簡單的字符串添加一個簡單的字符! 我正在嘗試將文本文件讀入 C#,以便稍后將其插入 SQL 服務器表中。 無論如何,我一直堅持向字符串添加單引號字符。 我的代碼如下:
string text;
using (var streamReader = new StreamReader(@"The_Directory\myTextFile.txt", Encoding.UTF8))
{
text = streamReader.ReadToEnd();
}
string[] lines = text.Split(new Char[] { '\n' });
string rearrange;
foreach (string line in lines)
{
rearrange = "*" + line + "'";
Console.WriteLine(rearrange);
}
我得到的結果不包含我希望添加到字符串末尾的字符,而只包含我想添加到末尾的字符,在開頭。
輸出是這樣的:
'The first line
'The second line
我不明白為什么它不執行簡單的字符串加法。 我試圖過濾掉行中任何可能的額外 \\n 字符,但它沒有幫助。
正如@Olivier 所指出的,您正在拆分\\n
而不是\\r\\n
。 這可能意味着在您閱讀的每一行的末尾仍然有一個\\r
字符(回車)。 結果輸出是:
*The first line\r'
*The second line\r'
在典型的終端模擬器上,它顯示為:
'The first line
'The second line
如果您可以減慢終端輸出的速度,您會看到*
最初位於行首,然后被'
覆蓋。
擺脫混亂的一種方法是去除尾隨的空白:
rearrange = "*" + line.TrimEnd() + "'";
注意:這些都不適用於在“經典”Mac 上生成的文件,其中換行符是沒有換行符的回車。 我建議遵循奧利維爾的回答。
試試這個:
using System.IO;
string[] lines = File.ReadAllLines("The_Directory\myTextFile.txt", Encoding.UTF8);
string rearrange;
foreach (string line in lines)
{
rearrange = "*" + line + "'";
Console.WriteLine(rearrange);
}
在 Windows 上,新行是Environment.Newline = "\\r\\n"
。
僅在'\\n'
上拆分會導致剩余的'\\r'
暗示轉到當前行的開頭,並且*
在輸出到控制台時被'
替換,因此結果。
因為 DOS 歷史上的\\n
導致光標只在列中向下移動,如果我沒記錯的話,但我不確定,所以也需要\\r
。
只需在“拆分”中嘗試以下小修改:
string text;
using (var streamReader = new StreamReader(@"The_Directory\myTextFile.txt",Encoding.UTF8))
{
text = streamReader.ReadToEnd();
}
string[] lines = text.Replace("\r\n","\n").Split("\n");
string rearrange;
foreach (string line in lines)
{
rearrange = "*" + line + "'";
Console.WriteLine(rearrange);
}
通常,普通 (Windows) UTF-8 文本文件在每一行的末尾都有 \\r\\n 。 如果只用\\n 分割,那么剩余的\\r 將保留,在控制台上顯示\\r 的結果是光標跳到當前行的開頭,然后顯示下一個字符。 因此,它會在顯示更多文本時用以下字符覆蓋該行。
2 事情。 嘗試 string.split 和 stringsplitoptions.RemoveEmptyEntries。 對於 StringBuilding 使用 StringBuilder 而不是連接它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.