2012-03-06 99 views
11

假设我想删除围绕字符串的所有"。在Python中,我会:用于Python的str.strip()的Java等价物

>>> s='"Don\'t need the quotes"' 
>>> print s 
"Don't need the quotes" 
>>> print s.strip('"') 
Don't need the quotes 

如果我想删除多个字符,例如"和括号:

>> s='"(Don\'t need quotes and parens)"' 
>>> print s 
"(Don't need quotes and parens)" 
>>> print s.strip('"()') 
Don't need quotes and parens 

什么是剥离Java中的字符串优雅的方式?

+0

String类有一个replace()方法。它应该适合你的需求。 – wuppi 2012-03-06 12:14:27

+0

[看这里](http://stackoverflow.com/a/2088900/593709)是一个详细的讨论。 – 2012-03-06 12:20:20

回答

9

假设我想删除所有"围绕一个字符串

最接近相当于Python代码是:

s = s.replaceAll("^\"+", "").replaceAll("\"+$", ""); 

如果我要删除多个字符,例如"和括号:

s = s.replaceAll("^[\"()]+", "").replaceAll("[\"()]+$", ""); 

如果你可以使用Apache Commons Lang,有StringUtils.strip()

+0

+1为了处理多个字符的请求,它仍然会创建两个新的字符串, – 2012-03-06 12:28:51

+1

@AdamMatan:我认为Common Lang的'StringUtils.strip()'是首选的方法。 – NPE 2012-03-06 12:30:18

0

这取代"()在开始和结束字符串

String str = "\"te\"st\""; 
str = str.replaceAll("^[\"\\(]+|[\"\\)]+$", ""); 
1

在Java中,你可以做到这一点,如:

s = s.replaceAll("\"",""),replaceAll("'","") 

此外,如果你只是想取代“开始”和“结束”引号,您可以执行如下操作:

s = s.replace("^'", "").replace("'$", "").replace("^\"", "").replace("\"$", ""); 

或者,如果简单地说:

s = s.replaceAll("^\"|\"$", "").replaceAll("^'|'$", ""); 
+0

它相应地修改了我的答案.. !! – 2012-03-06 12:23:19

+0

不是浪费时间,创建两个新的字符串而不是一个? – 2012-03-06 12:24:04

+0

请注意,字符串是“不可变的”,因此仅仅执行'''s.replace(“\”“,”“)'''是不够的,您必须将变量's'重新赋值给结果字符串'。 – 2012-03-06 12:33:54

0

试试这个:

new String newS = s.replaceAll("\"", ""); 

有没有个字符的字符串替换双引号。

6

Guava库有一个方便的工具。该库包含CharMatcher.trimFrom(),它可以做你想做的。您只需创建一个CharMatcher,它与要删除的字符匹配。

代码:

CharMatcher matcher = CharMatcher.is('"'); 
System.out.println(matcher.trimFrom(s)); 

CharMatcher matcher2 = CharMatcher.anyOf("\"()"); 
System.out.println(matcher2.trimFrom(s)); 

内部,这不会产生任何新的字符串,而只是调用s.subSequence()。因为它也不需要Regexps,所以我猜它是最快的解决方案(并且肯定是最清晰和最容易理解的)。