c# - 逐字字符串替换
问题描述
var a = "asdfgh\r";
Console.WriteLine(a.Contains(@"\r"));
var b = a.Replace(@"\r","").Replace(@"\n","");
var c = a.Replace("\r","").Replace("\n","");
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
“b”和“c”打印相同的字符串,“a”打印假,
我试图将 \r 和 \n 替换为空字符,所以首先我尝试了下面的代码,“\r”和“\n”中有一个反斜杠,所以我决定在它们之前使用“@”;
var b = a.Replace(@"\r","").Replace(@"\n","")
但这没有用,
var c = a.Replace("\r","").Replace("\n","");
这行得通,所以我很困惑什么时候应该使用“@”字符?
解决方案
您声明字符串a
以回车符结尾:
var a = "asdfgh\r"; //it has a length of 7 when compiled
因此,您必须将回车替换为空:
Replace("\r","")
如果您已声明字符串以“反斜杠 r”结尾:
var a = @"asdfgh\r"; //it has a length of 8 when compiled
那么你就可以成功地用任何内容替换“反斜杠 r”:
Replace(@"\r","")
这也可以:
Replace("\\r","")
因为双斜杠变成了单斜杠,然后 r 是一个普通字符,所以你要替换“反斜杠 r”而不是回车
编译 C# 编译器时,在字符串中查找 \ 并根据某些规则转换以下字符。在字符串之前使用 @ 会关闭此功能。大多数情况下,它对路径很有用。请记住,这是编译时的事情,而不是您需要对保存在运行时输入的数据的变量执行的操作。在变量名前加上 @ 意味着不同的东西——允许你将变量称为保留字,比如string @for = "for"
——可悲的做法;不要这样做
最终的问题是您在声明字符串时不一致 -a
不是逐字字符串,因此它确实有一个回车符,然后您尝试使用逐字字符串替换(并且“反斜杠 r”是不同的字符串到“回车”
推荐阅读
- spring-data-elasticsearch - 升级到spring boot 2.2.X后的MappingException(Attempt to add id)
- select - DataList:如何隐藏查找值?
- apache-arrow - 如何在 Apache Arrow 中对数据进行排序
- python - 如何根据底图上的地理坐标指向箭头框?
- arrays - 如何对javascript中的每个项目求和
- javascript - Js推入数组,该数组位于具有多个数组的对象中
- botframework - Microsoft 网络聊天自动滚动
- javascript - SHA256 Hashing Large files in angular 6 using Filereader Issue
- python - 简化 main1.py 或 main2.py 调用 middle.py 调用 sub1.py 或 sub2.py
- node.js - 无法在 NodeJS 应用程序中的 Heroku 上添加 npm 模块