C#无法按新行拆分字符串\n

C#无法按新行拆分字符串\n,c#,split,newline,C#,Split,Newline,我面临一个奇怪的问题,C#无法拆分字符串以获得新行。我尝试了许多组合,比如使用only Split(“\n”),但所有的前导都返回数组第一个位置上的整个未写字符串,因此第[0]行与要拆分的输入字符串相同,这在我必须解析的其他字符串中从未发生过 下图: 字符串: 不要删除以下关键字!这些关键字用于 “兼容打印机”打印和灯丝轮廓的条件 将特定的打印和灯丝配置文件链接到此打印机 配置文件。\n轮胎供应商\u PRUSA3D\n轮胎型号\u SL1\n轮胎供应商\u EPAX\n轮胎型号\u X1\n

我面临一个奇怪的问题,C#无法拆分字符串以获得新行。我尝试了许多组合,比如使用only Split(“\n”),但所有的前导都返回数组第一个位置上的整个未写字符串,因此第[0]行与要拆分的输入字符串相同,这在我必须解析的其他字符串中从未发生过

下图:

字符串:

不要删除以下关键字!这些关键字用于 “兼容打印机”打印和灯丝轮廓的条件 将特定的打印和灯丝配置文件链接到此打印机 配置文件。\n轮胎供应商\u PRUSA3D\n轮胎型号\u SL1\n轮胎供应商\u EPAX\n轮胎型号\u X1\n\nSTART\u自定义\u值\nLip\u XY\nLayeroftime\u0\nBottomLightOffDelay\u2\nBottomLiftHeight\u5\nLiftHeight\nLiftHeight\n5.5\nBottomLiftsSpeed\n40.2\nLiftSpeed\nLiftsSpeed\nLifts60\nTractSpeed\n150\nLightingPWM\nLayerPWM\u255\nNantAliasing\u4 ; 使用0或1禁用带有“打印机伽马校正”的抗锯齿 设置为0,否则使用2的倍数,并将“gamma校正”设置为1 用于启用\n指定\u自定义\u值

代码:

var lines=previousString.Split(新[]{“\r\n”,“\r”,“\n”},StringSplitOptions.RemoveEmptyEntries)

输出: 长度为1的生产线数组[0]==previousString

string[] lines = theText.Split(
    new[] { Environment.NewLine },
    StringSplitOptions.None
);
编辑:

工作小提琴:

见:

编辑:

工作小提琴:


请参阅:

我不太清楚您为什么使用打印机方法,但我希望您不需要它们

string test=“Hello\nTest\n123”//创建测试字符串
字符串[]separated=test.Split('\n')//按“\n”拆分字符串
对于(int i=0;i
输出:

Hello 
Test
123
Hello 
Test 
123 
End
我希望这个解决方案对您有效

编辑:添加了\r\n和\r支持 如果您还需要按“\r”或“\r\n”拆分字符串,则此代码就是要使用的代码

string test=“Hello\r\nTest\n123\rEnd”//创建测试字符串
test=test.Replace(“\r\n”,“\n”);
测试=测试。替换(“\r”和“\n”);
字符串[]separated=test.Split('\n')//按“\n”拆分字符串
对于(int i=0;i
输出:

Hello 
Test
123
Hello 
Test 
123 
End
编辑2:希望是解决方案 你是这么说的

\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_5.5\nBottomLiftSpeed_40.2\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
如果是字符串,则问题可能是此字符串包含一些“值”,这将干扰.Split方法


如果您能够手动输入字符串,则应将简单的“替换为”

我不太清楚您为什么使用打印机方法,但我希望您不需要它们

string test=“Hello\nTest\n123”//创建测试字符串
string[]separated=test.Split('\n');//按'\n'拆分字符串
对于(int i=0;i
输出:

Hello 
Test
123
Hello 
Test 
123 
End
我希望这个解决方案对您有效

编辑:添加了\r\n和\r支持 如果您还需要按“\r”或“\r\n”拆分字符串,则此代码就是要使用的代码

string test=“Hello\r\nTest\n123\rEnd”//创建测试字符串
test=test.Replace(“\r\n”,“\n”);
测试=测试。替换(“\r”和“\n”);
string[]separated=test.Split('\n');//按'\n'拆分字符串
对于(int i=0;i
输出:

Hello 
Test
123
Hello 
Test 
123 
End
编辑2:希望是解决方案 你是这么说的

\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_5.5\nBottomLiftSpeed_40.2\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
如果是字符串,则问题可能是此字符串包含一些“值”,这将干扰.Split方法


如果您能够手动输入字符串,则应将简单的“替换为”

有时当您在屏幕上看到
\n
时,它实际上是反斜杠(ASCII 92和en(ASCII 110),而不是新行的占位符/转义序列(ASCII 10)这里的一个重要提示是,文本框通常不会显示带有转义码的换行符,而是会放入实际的新行

要在
\n
上拆分,请使用字符串
“\\n”
,该字符串表示一个由两个字符组成的字符串:两个反斜杠在字符串中生成一个单字符ASCII 92=”,然后是一个小写的n


或者您可以使用
@“\n”
。@符号告诉C不要在引号中使用转义码。

有时当您在屏幕上看到
\n
时,它实际上是反斜杠(ASCII 92和en(ASCII 110),而不是新行(ASCII 10)的占位符/转义序列这里的一个重要提示是,文本框通常不会显示带有转义码的换行符,而是会放入实际的新行

要在
\n
上拆分,请使用字符串
“\\n”
,该字符串表示一个由两个字符组成的字符串:两个反斜杠在字符串中生成一个单字符ASCII 92=”,然后是一个小写的n


或者,您可以使用
@“\n”
。@符号告诉C#不要在引用的字符串中使用转义码。

请发布a,不要发布。我的直觉是,您正在拆分的文本实际上没有换行符:我怀疑这两个字符是真的:反斜杠&en。请尝试拆分“\\n”为了确认。Magnetron我发布了一个图像,因为它显示了调试器和问题的证明。我认为从图像复制1行代码并不是那么困难,我的代码所做的只是一个字符串。拆分,仅此而已,但我将在此处将字符串作为文本发布,以便更容易复制和查看。编辑now@Jamie如果您是右双反斜杠(\\n)解决了这个问题,这很奇怪,因为我从文件中读取了文本,需要重新检查。谢谢你可以将其作为anwser发布,这样我就可以将其标记为solvedPlease、post a和Not post。我的直觉是,你正在拆分的文本中实际上没有换行符:我怀疑这确实是两个字符:反斜杠&en。尝试拆分“\\n”确认。Magnetron我发布了一个图像,因为它显示了调试器和问题的证明。我认为从图像中复制一行代码并不困难,