我想移除String
所包围的#
的一部分,如下所示:
String s = "#thispartneedstogo#anythingelsecanremain"
//remove "#thispartneedstogo#"
s = "anythingelsecanremain"
我尝试使用此代码执行此操作:
String stripped = content.replaceAll("#.*?#", "").replace("\n", "");
但是,它没有给我预期的结果。
注意,我想要一个能够检测并删除这个所谓的“模式”的通用答案,即在String
之类的"#remove#keep#remove#"
"keep"
中,如果可能的话,只保留{{1}}。< / p>
答案 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));