首页 > 解决方案 > 对 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),这将不起作用。我不知道我是否已经编写了太长时间的代码并且犯了一个简单的错误,或者我是否真的误解了其中的任何内容。

标签: c#.netstring

解决方案


首先,这条线不好:

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);

推荐阅读