【发布时间】:2016-04-30 17:01:39
【问题描述】:
我遇到了一个我不明白的问题。我正在从文件中读取数据并且遇到了这样一种情况:文件中的条目上的string.Replace(" ", "<whatever>") 不会替换单个空格的出现。我不禁感到我错过了一些非常基本的东西,因为声明为文字的相同类型的字符串可以正常工作。
文件中的典型行(每个条目由制表符分隔):
“2016-feb-08 09:54:00”“2016-feb-08 17:28:00”“短”“227”“5 170,00”“+3,90%”“0,00 "
使用File.ReadAllLines().Split(new[] {"\t" }, StringSplitOptions.None); 将文件中的数据读入一个数组。
然后我想清理第五个条目以进行进一步处理,这就是我遇到问题的时候:
entries[4].Replace(" ", string.Empty).Replace("\"", string.Empty); 给出“5 170,00”
Regex.Replace(entries[4], @"\s+", string.Empty).Replace("\"", string.Empty); 给出“5170,00”,这是我正在寻找的结果。
在带有单个空格的文字上运行第一个 Replace() 效果很好,所以我很好奇文件中字符串中的空格是否有所不同?虽然 Regex 解决方案有效,但我真的很想知道我的“问题”是什么。
【问题讨论】:
-
你能在这里发布以下命令的结果吗:
string x = string.Join(string.Empty, Encoding.UTF8.GetBytes(entries[4]).Select(b => b.ToString("x2")))? -
@UlugbekUmirov 命令的结果是“2235c2a03137302c303022”。
-
也许你应该清理并重建你的解决方案。
-
在
5和1之间有NO-BREAK SPACE (0xc2 0xa0)符号。正则表达式\s匹配它。但是如果你想使用string.Replace,那么你必须像entries[4].Replace("\u00a0", string.Empty)一样使用它。