在 C# 中使用 string.Remove('\n') 会在某一点截断字符串
Posted
技术标签:
【中文标题】在 C# 中使用 string.Remove(\'\\n\') 会在某一点截断字符串【英文标题】:Using string.Remove('\n') in C# truncates the string at one point在 C# 中使用 string.Remove('\n') 会在某一点截断字符串 【发布时间】:2021-07-14 10:09:27 【问题描述】:我有一个带换行符的 IP 地址字符串。 我需要从文字中删除所有换行符。所以我使用了 string.Remove()
现在一旦调试器越过这条线,表达式的结果会在“192.168.20”处截断
为什么会这样。我不想用替换,我想去掉'\n'
【问题讨论】:
否string.Remove
方法需要一个字符来删除。我希望它被转换为 int (10
)
即使它尝试转换为 int,它如何在特定点截断?我能够使用 var result = @"192.168.204.18".Replace("\n", ""); 解决它但我想知道为什么 string.Remove() 表现不佳
这并不奇怪。为什么你觉得它表现得很奇怪?
【参考方案1】:
如果您查看documentation,您会发现实际上没有需要删除字符的string.Remove
重载。
我希望 char
被隐式转换为 int
并且您正在点击 string.Remove(startIndex)
:
返回一个新字符串,其中当前实例中的所有字符(从指定位置开始到最后一个位置)都已被删除。
\n
将转换为字符的十进制值 10,因此作为位置 10 传递给 string.Remove
,因此之后的所有内容都会被删除,这就是我们所看到的情况:192.168.20 有 10 个字符长。
如果您只想删除第一个 \n
之后的所有内容(包括第一个 \n
),我建议您这样做:
int idx = input.IndexOf("\n", StringComparison.InvariantCulture);
if (idx != -1)
input = input.Remove(idx);
或者简单地替换所有\n
的实例,使用replace
(我知道你说过你不想这样做,但以防万一):
input = input.Replace("\n", string.Empty, StringComparison.InvariantCulture);
【讨论】:
很好的解释。谢谢。!【参考方案2】:String.Remove 不接受字符而是索引。
整数形式的\n
是10
,这样可以解释你的行为。
你正在寻找的是这样的:
result = input.Replace("\n", "");
【讨论】:
"我不想用 Replace,我想去掉 '\n'". 我在问题和评论中明确提到我知道如何使用 string.Replace()。 这正是 Replace 所做的。它将 \n 替换为空,从而将其删除 我只是想知道为什么它会截断IP地址中'20'处的字符串 因为 Remove 需要一个Int32
as 参数,所以你给它一个 char
隐式转换为 Int32
: 10。所以它会在索引 10 处截断你的字符串。如果你看结果,您会发现192.168.20
正好是 10 个字符长。以上是关于在 C# 中使用 string.Remove('\n') 会在某一点截断字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 constexpr string_view 上使用 std::string_view::remove_prefix()