删除一对哈希内部的String部分

时间:2015-01-22 23:12:10

标签: java regex

我想移除String所包围的#的一部分,如下所示:

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

我尝试使用此代码执行此操作:

String stripped = content.replaceAll("#.*?#", "").replace("\n", "");

但是,它没有给我预期的结果。

注意,我想要一个能够检测并删除这个所谓的“模式”的通用答案,即在String之类的"#remove#keep#remove#" "keep"中,如果可能的话,只保留{{1}}。< / p>

4 个答案:

答案 0 :(得分:2)

您的代码实际上按照您的预期方式运行:

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

答案 1 :(得分:1)

这应该用于提取最后一位;

String ss[] = s.split("#");
String desiredStr = ss[ss.length-1];

或者您可以使用String tokenizer来标记输入字符串并使用#ree获取所有参数。

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

String ss = s.replaceAll(replace_what, replace_with_what);

所以你需要,     String ss = s.replaceAll(“#”,“”); //肯定已经在答案列表中纠正了这个问题:)

如果您想在“#remove#keep#remove#”中检测到“keep”这样的特定字词,最好的方法是执行以下操作:

// 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");
}

关于基于regexp的替换:

我个人讨厌正则表达式,因为它是编程语言世界中发明的最可怕和令人困惑的事情(完成咆哮!)。但是,以下内容应该为您提供更多的通用替换(即,如果您只想在最终字符串中使用字母字符):

s.replaceAll("[^a-zA-Z]+",""); // Replaces anything that is not an alph

答案 2 :(得分:0)

&#39; *&#39;一般来说,正则表达式是贪婪的,这意味着它将消耗所有可用的匹配。在你的情况下,它将匹配第一个&#39;#&#39;到最后的#&#39;包括中间的#,#/ p>

将正则表达式更改为更具体的:

"#[^#]*#"

避免匹配介入的#&#39;

答案 3 :(得分:-3)

使你想要在单独的变量

中替换的部分
 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));