如何从字符串中去掉开头和结尾的双引号?

185

我想从一个字符串中删除开头和结尾的双引号 (")。
如何在Java中实现?谢谢!


1
该字符串已知是否带引号,还是检查引号是问题的一部分? - Michael Myers
19个回答

4

编辑:我意识到我应该明确指出,只有在两者都存在时才有效。否则,该字符串不被视为引用。当我处理 CSV 文件时,就出现了这种情况。

org.apache.commons.lang3.StringUtils.unwrap("\"abc\"", "\"")    = "abc"
org.apache.commons.lang3.StringUtils.unwrap("\"abc", "\"")    = "\"abc"
org.apache.commons.lang3.StringUtils.unwrap("abc\"", "\"")    = "abc\""

3
下面的正则表达式,当与java.util.regex.Matcher一起使用时,将匹配双引号之间的任何字符串,而不会影响字符串内部的双引号。
"[^\"][\\p{Print}]*[^\"]"

2
修改@brcolow的回答:

稍作修改

if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
    string = string.substring(1, string.length() - 1);
}

我认为方法参数应该用@NonNull进行注释,并且它应该在内部包含类似于Objects.requireNonNull(string)的内容,因为如果有人调用stripQuotes(null),那么他们很可能是出于错误而这样做! - brcolow

2
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
    strUnquoted = m.group(1);
}

1
private static String removeQuotesFromStartAndEndOfString(String inputStr) {
    String result = inputStr;
    int firstQuote = inputStr.indexOf('\"');
    int lastQuote = result.lastIndexOf('\"');
    int strLength = inputStr.length();
    if (firstQuote == 0 && lastQuote == strLength - 1) {
        result = result.substring(1, strLength - 1);
    }
    return result;
}

0

找到每个双引号的索引并在那里插入一个空字符串。


应该是双引号的第一个索引和最后一个索引。 - GuruKulki

0
public String removeDoubleQuotes(String request) {
    return request.replace("\"", "");
}

5
这个问题已经有多个答案和一个被接受的答案。您是否可以通过编辑您的答案来解释您的答案与其他答案不同之处?另外,请注意,仅包含代码的答案从长远来看是没有用的。 - 7uc1f3r
5
这已经在这个答案中提到了:https://dev59.com/3HE85IYBdhLWcg3wzWvM#25452078 请不要再添加一个。 - Dharman

-2

Scala

s.stripPrefix("\"").stripSuffix("\"")

无论字符串开头和/或结尾是否有引号,此方法都有效。

编辑:抱歉,仅适用于Scala。


-2

Groovy

你可以使用Groovy中的正则表达式从字符串中减去一个子字符串:

String unquotedString = theString - ~/^"/ - ~/"$/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接