Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 删除一对散列中的字符串部分_Java_Regex - Fatal编程技术网

Java 删除一对散列中的字符串部分

Java 删除一对散列中的字符串部分,java,regex,Java,Regex,我想删除被#包围的字符串的一部分,如下所示: String s = "#thispartneedstogo#anythingelsecanremain" //remove "#thispartneedstogo#" s = "anythingelsecanremain" 我尝试使用以下代码执行此操作: String stripped = content.replaceAll("#.*?#", "").replace("\n", ""); 然而,它并没有给我预期的结果 请注意,我想要一个通用的

我想删除被
#
包围的
字符串的一部分,如下所示:

String s = "#thispartneedstogo#anythingelsecanremain"
//remove "#thispartneedstogo#"
s = "anythingelsecanremain"
我尝试使用以下代码执行此操作:

String stripped = content.replaceAll("#.*?#", "").replace("\n", "");
然而,它并没有给我预期的结果


请注意,我想要一个通用的答案,它将检测并删除这个所谓的“模式”,即在
字符串中,如
“#删除#保留#删除#”
,如果可能的话,只保留
“保留”

String ss[] = s.split("#");
String desiredStr = ss[ss.length-1];
或者可以使用字符串标记器对输入字符串进行标记,并使用#free获取所有参数

您可能需要使用replaceAll方法执行此操作:

String ss = s.replaceAll(replace_what, replace_with_what);
所以你需要, 字符串ss=s.replaceAll(“#“,”);//肯定有人在答案列表中纠正了这一点:)

如果要在“#删除#保留#删除#”中检测特定单词,如“保留”,最好的方法是执行以下操作:

// String s = "#thispartneedstogo#anythingelsecanremain";
String s = "#remove#keep#remove#";

List<String> list = Arrays.asList(s.split("#"));

// Suppose you want to check if something specific is in the list, but not
// necessarily how many times i.e. if there are duplicates:

// Obviously, parameterise remove with something like string ps = "remove";
if (list.contains("remove")){
    System.out.println("Found remove");
}

您的代码确实按照预期的方式工作:

String s = "#remove#keep#remove#";
String stripped = s.replaceAll("#.*?#", "");
System.out.println(stripped);  // keep

在单独的变量中设置要替换的零件

 String a = "#thispartneedstogo#";
    String s = "anythingelsecanremain";

    s = s+a;
// to replace
    System.out.println(s.replace("#thispartneedstogo#");
// to add
    System.out.println(a.concat(s));

一般来说,正则表达式中的“*”是贪婪的,这意味着它将消耗所有可用的匹配项。在你的情况下,它将从第一个“γ”到最后一个“α”,包括“在中间”。 将正则表达式更改为更具体的:

"#[^#]*#"

为了避免匹配中间的“#”

它给了您什么结果,以及它到底有什么出乎意料的地方?我不会为java中的行为发誓,但通常,
*
是贪婪的,因此它会匹配最外层的“#”之间的所有内容,而replaceAll结果将是一个空字符串。我希望使用模式
“#[^#]*#”
来产生所需的结果。您的代码是正常的。如果您执行的代码缺少问号,那么结果将是一个空白字符串,因为
*
是贪婪的“它没有给我预期的结果”。您得到了什么结果以及您期望得到什么?@David您的解决方案实际上解决了问题。如果你能给我一个答复,我很乐意接受。再次感谢。这并没有回答更一般的问题,即如何删除哈希之间出现的任何内容。例如,如何将
#Stuff ToDelete#
导入
a
?感谢您的输入-但我想要的是类似Java的注释,即
/**/。不过还是要谢谢你
"#[^#]*#"