Java Android replaceAll()从字符串中删除错误的字符
我的'replaceAll()'方法从字符串中删除错误的字符。线下Java Android replaceAll()从字符串中删除错误的字符,java,android,regex,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 + ",",""); 我怎样才能纠正这个
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 + ",","");
我怎样才能纠正这个问题
<>任何对此的帮助或指导都将非常感谢 < P>我会考虑使用Word边界<代码> \b/COD>这里。
String filter = s.replaceAll("(?:\\b" + itemClicked + "\\b,|,\\b" + itemClicked + "$)", "");
你对你所做的事有什么背景知识吗?存储逗号分隔的数字字符串,而不是数组或数字列表,有什么原因吗?如果您使用其中一个,则删除将简单得多。但是,我也不知道你在做什么的背景。试试:
String filter = temp.replaceAll("(^" + itemClicked + ",)|(," + itemClicked + "$)", "").replace("," + itemClicked + ",", ",");
如果我理解正确的话,问题是你没有抓住问题数字的周围环境。为此,您需要考虑三种可能性:
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”在开始和结束时替换它,最后留下一个“1,2,4,5,6,7,1113311”的字符串。+itemClicked+“,”,“,”)应防止从“12”中删除“2”。编辑除非这不适用于字符串上的第一个和最后一个值…+1,具体取决于上下文,使用
列表将是一个更好的主意。是的,老实说,这是一个影响相当大的项目的小缺陷,因此我无法更改,我想您可以始终在“,”上拆分字符串然后从结果数组中删除所需的元素,然后重新生成逗号分隔的字符串。有点贵,有点烦人,但我不太擅长正则表达式:)。根据您可以使用的库的不同,可以使用StringUtils.join从数组中重新创建逗号分隔的字符串。如果不是,那就是简单的代码。对于“3”,你得到1,2,4,5,6,7,8,9,10,11,12114,15
请注意,你正在用它删除两个逗号。你几乎完成了,你需要在删除最后一个元素时修复大小写:)是的,在删除最后一个元素时只需删除最后一个逗号,它就会工作。String filter=temp.replaceAll(\\b“+itemClicked+“\\b,,?\\b”+itemClicked+“$”,”代码>将修复尾随逗号问题。