170

我想从字符串中修剪开始和结束的双引号(“)。
我怎样才能在 Java 中实现呢?谢谢!

4

19 回答 19

294

您可以使用String#replaceAll()这种模式^\"|\"$

例如

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

要了解有关正则表达式的更多信息,请访问http://regular-expression.info

也就是说,这听起来有点像您正在尝试发明 CSV 解析器。如果是这样,我建议四处寻找现有的库,例如OpenCSV

于 2010-04-09T15:29:48.560 回答
37

要从字符串中删除第一个字符和最后一个字符,请使用:

myString = myString.substring(1, myString.length()-1);
于 2010-04-09T15:31:29.403 回答
22

也与 Apache StringUtils.strip()

 StringUtils.strip(null, *)          = null
 StringUtils.strip("", *)            = ""
 StringUtils.strip("abc", null)      = "abc"
 StringUtils.strip("  abc", null)    = "abc"
 StringUtils.strip("abc  ", null)    = "abc"
 StringUtils.strip(" abc ", null)    = "abc"
 StringUtils.strip("  abcyx", "xyz") = "  abc"

所以,

final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more

如我的示例所示,此方法适用于带引号和不带引号的字符串。唯一的缺点是,它不会寻找严格匹配的引号,只寻找前导和尾随引号字符(即,没有区别"partially"fully"引用的字符串)。

于 2016-03-23T14:34:33.313 回答
17

如果双引号只存在于开头和结尾,那么一个简单的代码就可以完美地工作:

string = string.replace("\"", "");

于 2014-08-22T16:57:31.093 回答
15

这是我发现的最好的方法,从字符串的开头和结尾去除双引号。

someString.replace (/(^")|("$)/g, '')
于 2016-07-25T13:05:54.933 回答
13

首先,我们检查字符串是否被双引号,如果是,则删除它们。如果实际上您知道它是双引号,则可以跳过条件。

if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
    string = string.substring(1, string.length() - 1);
}
于 2015-12-21T23:18:05.877 回答
12

使用 Guava 你可以写得更优雅CharMatcher.is('\"').trimFrom(mystring);

于 2014-04-10T09:20:34.957 回答
11

科特林

在 Kotlin 中,您可以使用String.removeSurrounding(delimiter: CharSequence)

例如

string.removeSurrounding("\"")

当且仅当它以delimiter开头和结尾时,从该字符串的开头和结尾删除给定的分隔符字符串。否则返回此字符串不变。

源代码如下所示:

public fun String.removeSurrounding(delimiter: CharSequence): String = removeSurrounding(delimiter, delimiter)

public fun String.removeSurrounding(prefix: CharSequence, suffix: CharSequence): String {
    if ((length >= prefix.length + suffix.length) && startsWith(prefix) && endsWith(suffix)) {
        return substring(prefix.length, length - suffix.length)
    }
    return this
}
于 2018-07-22T22:03:16.920 回答
5

I am using something as simple as this :

if(str.startsWith("\"") && str.endsWith("\""))
        {
            str = str.substring(1, str.length()-1);
        }
于 2020-09-08T05:46:40.443 回答
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\""
于 2019-01-27T10:05:49.410 回答
3

要在 Java 中从字符串的开头和结尾删除一个或多个双引号,您需要使用基于正则表达式的解决方案:

String result = input_str.replaceAll("^\"+|\"+$", "");

如果您还需要删除单引号:

String result = input_str.replaceAll("^[\"']+|[\"']+$", "");

注意:如果您的字符串包含"在里面,这种方法可能会导致问题(例如"Name": "John"=> Name": "John)。

在此处查看Java 演示

String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string
于 2016-12-23T09:23:49.563 回答
3

下面的模式,当与 一起使用时java.util.regex.Matcher,将匹配双引号之间的任何字符串,而不会影响字符串中双引号的出现:

"[^\"][\\p{Print}]*[^\"]"
于 2018-07-21T19:41:13.030 回答
2
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
    strUnquoted = m.group(1);
}
于 2015-09-18T08:21:15.123 回答
2
public String removeDoubleQuotes(String request) {
    return request.replace("\"", "");
}
于 2020-10-02T18:40:15.173 回答
2

稍微修改@brcolow的答案

if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
    string = string.substring(1, string.length() - 1);
}
于 2019-04-24T17:51:14.427 回答
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;
}
于 2015-12-18T20:31:43.973 回答
1

斯卡拉

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

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

编辑:抱歉,仅限 Scala

于 2017-11-23T14:54:38.177 回答
0

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

于 2010-04-09T15:29:30.173 回答
0

时髦的

您可以使用 groovy 中的正则表达式从字符串中减去子字符串:

String unquotedString = theString - ~/^"/ - ~/"$/
于 2021-01-28T01:03:30.033 回答