【问题标题】:delete an exact numerical value from string [closed]从字符串中删除一个精确的数值[关闭]
【发布时间】:2017-03-16 11:28:13
【问题描述】:

在 asp.net 中,我在字符串中有一些值,如下所示:

1,12,123,21,23,256 等

我希望如果我想删除 1,那么应该只从列表中删除 1,如果我想删除 12,那么应该只从列表中删除数字 12。

代码应该花费更少的时间,因为这个按钮上会有很多用户。使用字符串

replace()regex ,所有出现的 1 和 12 都改变了。

我尝试了以下方法:

string llist2 = "1,12,123,23,21";
string[] vals = llist2.Split(',');
int numtorem = 1;
vals = Array.FindAll(vals, val => val != numtorem).ToArray();

这里,vals 是一个字符串数组,所以它不起作用。 然后我尝试了int[] vals = llist2.Split(',');,但 llist2 是一个字符串,所以它不会转换。如果我为转换添加更多代码,那么代码执行将过多,并且由于大量用户并行工作,页面会变慢。

注意:llist2 中的字符串来自使用选择查询的数据库。我希望我也不会被要求分享选择查询代码。

【问题讨论】:

  • 1) 显示您的代码 - 不清楚您尝试了什么 2) 提供输入和输出字符串的示例 - 不清楚真实字符串的外观以及如何处理数字周围的逗号和空格
  • 你能用一个 int 列表代替吗?如果是这样,那么您可以使用 list.Remove(value) 来实现此行为。
  • “我在一个字符串中有一些值” - 是的,但为什么呢?将它们放在适当的结构中(例如List<int>),以便您可以实际使用它们。不要工作“stringly typed”。
  • 包含逗号的数字列表来自数据库,它们存储在数据库中的 varchar 列中。当用户单击按钮时,我需要从中删除一个数字(使用 Ajax 来避免回发)。
  • 既然已经添加了代码,请大家删除您的反对票并回答问题吗?

标签: c# asp.net regex


【解决方案1】:

我认为,最好先转换 1 个数字(要删除的数字),然后再转换整个列表。 更新您的代码以将数字转换为字符串,就是这样

string llist2 = "1,12,123,23,21";
string[] vals = llist2.Split(',');
int numtorem = 1;
llist2 = String.Join(",", Array.FindAll(vals, val => val != numtorem.ToString()));

【讨论】:

  • Array.FindAll 返回一个数组。您无需在此处创建另一个。您也可以使用vals.Where(predicate) 而不是Array.FindAll 来避免创建任何额外的数组
  • @SergeyBerezovskiy 你能按照你的提示发布相关代码吗?
【解决方案2】:

别担心,兄弟,这里的人们习惯于快速否决帖子而不是帮助: 以下是适合您的解决方案:

string llist2 = "1,12,123,23,21";
int[] vals = Array.ConvertAll(llist2.Split(','), int.Parse);
int numtorem = 1;
vals = Array.FindAll(vals, val => val != numtorem).ToArray();

希望这会有所帮助。

【讨论】:

  • 是的,这就像一个魅力。谢谢。
【解决方案3】:

您可以直接拆分到List<int>并删除号码。

List<int> vals = llist2.Split(',').Select(Int32.Parse).ToList();
vals.Remove(numtorem);

【讨论】:

    【解决方案4】:

    如果您不想将列表转换为整数,您可以使用@ASh 解决方案,或者这样做:

    string llist2 = "1,12,123,23,21";
    int numtorem = 1;
    llist2 = Regex.Replace(llist2, string.Format("^{0},|,{0}(,)|,{0}$", numtorem), "$1");
    
    //"$1" is the first match group: (,) => string.Empty or ","
    //Works fine with 1, 123, 21, etc...
    
    //Console.WriteLine(llist2);
    //Output 12,123,23,21
    

    【讨论】:

    • 为简化而编辑。 @ASh 的解决方案(已经消失)是在 llist2 的开头和结尾添加逗号并将 ("," + num + ",") 替换为 string.Empty,最后删除添加的逗号...跨度>
    【解决方案5】:

    这样

    string llist2 = "1,12,123,23,21,1";
    string[] vals = llist2.Split(',');
    int numtorem = 1;
    string[] results = Array.FindAll(vals, s => !s.Equals(Convert.ToString(numtorem))).ToArray();
    

    【讨论】:

    • 您将事物转换为字符串而不是整数,而需要替换确切的整数?
    • 更新了我的朋友
    猜你喜欢
    • 2021-08-30
    • 2012-10-02
    • 1970-01-01
    • 2023-02-06
    • 2011-07-05
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多