我的'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 + ",","");
我怎么能纠正这个?
非常感谢任何有关此的帮助或指导
答案 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)
如果我正确理解了这个问题,那么问题就是你没有抓住有关号码的周围环境。要做到这一点,您需要考虑三种可能性:
因此,您需要将其拆分为两个或三个逻辑,因为每个逻辑必须以不同的方式作出反应。有了#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"。