c# - 对 String.Remove 的困惑
问题描述
我很难理解为什么 String.Remove 在我的某个场景中不起作用。我有一种方法(仅用于一些练习),它根据给定的位置删除字符串中的字符,其工作原理如下:
public static string RemoveCharacter(string word, int pos_to_del)
{
int string_length = word.Length;
if (Enumerable.Range(0, string_length - 1).Contains(pos_to_del))
{
word = word.Remove(pos_to_del, pos_to_del);
}
return word;
}
如果 pos_to_del > 0 它将起作用(例如 word = hello 和 pos_to_del = 1,result = hllo)。但是,如果用户希望该位置是第一个字符 (0),这将不起作用。我不知道我是否已经编写了太长时间的代码并且犯了一个简单的错误,或者我是否真的误解了其中的任何内容。
解决方案
首先,这条线不好:
if (Enumerable.Range(0, string_length - 1).Contains(pos_to_del))
这条线不是您的问题的原因,但它是一个问题。如果您的字符串很长,那么您将生成与该字符串一样长的数字序列。这可能非常低效,而且没有必要。您可以使用一个简单的比较:
if (pos_to_del >= 0 && pos_to_del < word.Length)
好多了。您没有生成序列;无论字符串的长度如何,它的性能都是一致的。
其次,第二个参数 tostring.Remove(int,int)
是要删除的字符数。这是您的问题的原因:您的代码当前说要从字符串的第一个位置删除零个字符。要修复它,只需提供 1:
word = word.Remove(pos_to_del, 1);
推荐阅读
- oracle - 使用 select 语句查询以填充空行
- c# - 套接字侦听 TCP。可以看到在wireshark上收到的数据,但没有到达端口。C#
- c# - 无法将派生类对象添加到其基类类型的列表中
- datetime - 如何在 Power Query 中为每个产品添加前一天销售的自定义列
- python - Django unittest 结果取决于测试名称
- c# - 如何将依赖项注入 MassTransitStateMachine 活动?
- logging - 如何从 journalctl 输出中提取多个值
- pine-script - 如何创建资产列表和可选的 input.string - Pine
- docker - 通过 HTTPS 提供 dockerized 微服务
- arrays - 2D 寻峰二分搜索