Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android replaceAll()从字符串中删除错误的字符_Java_Android_Regex - Fatal编程技术网

Java Android 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 + ",",""); 我怎样才能纠正这个

我的'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 + ",","");  
我怎样才能纠正这个问题


<>任何对此的帮助或指导都将非常感谢

< P>我会考虑使用Word边界<代码> \b/COD>这里。

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

你对你所做的事有什么背景知识吗?存储逗号分隔的数字字符串,而不是数组或数字列表,有什么原因吗?如果您使用其中一个,则删除将简单得多。但是,我也不知道你在做什么的背景。

试试:

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

如果我理解正确的话,问题是你没有抓住问题数字的周围环境。为此,您需要考虑三种可能性:

  • 编号从列表“3,2..”开始
  • 这个数字在列表“…,3,4,…”的中间。
  • 编号在列表的末尾“,,14,3”
  • 因此,您需要将其分为两到三个逻辑部分,因为每个逻辑部分的反应都不同。有了可能性#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”在开始和结束时替换它,最后留下一个“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+“$”,”将修复尾随逗号问题。