Android replaceAll()从String中删除错误的字符

时间:2014-05-23 21:20:24

标签: java android regex

我的'replaceAll()'方法从字符串中删除了错误的字符。字符串

下面
String i = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"

如果我想从i中删除“2”,它也从12中移除'2'。所以新字符串现在是;

String i = "1,3,4,5,6,7,8,9,10,11,113,14,15"

这是我正在使用的当前代码:

String filter = temp.replaceAll(itemClicked + ",","");  

我怎么能纠正这个?

非常感谢任何有关此的帮助或指导

4 个答案:

答案 0 :(得分:5)

我会考虑在这里使用单词边界\b

String filter = s.replaceAll("(?:\\b" + itemClicked + "\\b,|,\\b" + itemClicked + "$)", "");

答案 1 :(得分:3)

你有关于你正在做什么的背景吗?您是否有理由以数字形式存储逗号分隔的字符串,而不是存储数组或数字列表?如果您使用其中之一,删除会更简单。但同样,我不知道你正在做什么的背景。

答案 2 :(得分:0)

尝试:

String filter = temp.replaceAll("(^" + itemClicked + ",)|(," + itemClicked + "$)", "").replace("," + itemClicked + ",", ",");

答案 3 :(得分:0)

如果我正确理解了这个问题,那么问题就是你没有抓住有关号码的周围环境。要做到这一点,您需要考虑三种可能性:

  1. 该号码从列表开始" 3,2 .."
  2. 该号码位于列表中间" ..,3,4,..."
  3. 该号码位于列表的末尾" ..,14,3"
  4. 因此,您需要将其拆分为两个或三个逻辑,因为每个逻辑必须以不同的方式作出反应。有了#2的可能性,我们会捕获前后的逗号,并且需要留下一个逗号。有了#1和#3的可能性,我们会捕捉字符串的开头或结尾,因此不会留下任何东西。所以我们可以将逻辑削减到两个过滤器:

    String regexOne = "," + itemClicked + ",";
    String regexTwo = "($" + itemClicked + ",|" + itemClicked + "$)";
    String filter = temp.replaceAll(regexOne, ","); // Catches #2
    filter = filter.replaceAll(regexTwo, ""); // Catches #1 & #3
    

    因为我们被迫采取两种不同的行动,所以我们不能将这种行为减少到这两个步骤。

    为了跟进您的示例,请假设以下内容:

    String i = "3,1,2,3,4,5,6,7,11,13,311,3";
    

    应用新代码将使用第一个过滤器",3,"来捕获中间的3。并将其替换为",",以及" 3,"和",3"在开头和结尾干净利落,留下最后一串" 1,2,4,5,6,7,11,13,311"。