问题 Python的str.strip()的Java等价物


假设我想删除所有 " 围绕一个字符串。在Python中,我会:

>>> 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中删除字符串的优雅方法是什么?


1476
2018-03-06 12:11


起源

String类有一个replace()方法。它应该符合您的需求。 - wuppi
看这里 是一个详细的讨论。 - Adil Soomro


答案:


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

与Python代码最接近的是:

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

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

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

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


9
2018-03-06 12:23



+1用于按要求处理多个字符。不过,它仍会创建两个新的字符串。 - Adam Matan
@AdamMatan:我觉得Common Lang's StringUtils.strip() 是首选的方法。看到我更新的答案。 - NPE


番石榴 库有一个方便的实用程序。该库包含 CharMatcher.trimFrom(),做你想要的。你只需要创建一个 CharMatcher 它匹配您要删除的字符。

码:

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

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

在内部,这不会创建任何新的String,而只是调用 s.subSequence()。因为它也不需要Regexps,我猜它是最快的解决方案(当然也是最干净,最容易理解的)。


6
2018-03-06 12:28





在java中,你可以这样做:

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

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

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

或者如果简单地说:

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

1
2018-03-06 12:18



它相应地修改了我的答案.. !! - Ramandeep Singh
这不是浪费时间,创造两个新的字符串而不是一个吗? - Adam Matan
请注意,字符串是“不可变的”,因此仅仅执行's'replace(“\”“,”“)'''是不够的。必须将变量's'重新分配给结果字符串's'。 。 - Ramandeep Singh
答案你“接受”,它做了什么比我的好...... ??我给了你3种不同的方式去... !!至少,你可以赞成我的答案.. !! - Ramandeep Singh


尝试这个:

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

用无字符串替换双引号。


0
2018-03-06 12:19





这取代了 " 和 () 在字符串的开头和结尾

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

0
2018-03-06 12:14