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

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

292328 次浏览

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

您可以将 String#replaceAll()^\"|\"$模式一起使用。

例如。

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

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

也就是说,这闻起来有点像您正在尝试发明一个 CSV 解析器。如果是这样,我建议查找现有的库,比如 OpenCSV

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

myString = myString.substring(1, myString.length()-1);

使用番石榴你可以写出更优雅的 CharMatcher.is('\"').trimFrom(mystring);

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

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

Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
strUnquoted = m.group(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;
}

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

if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}

还有 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"引号字符串之间没有区别)。

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

someString.replace (/(^")|("$)/g, '')

要从 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

斯卡拉

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

无论字符串在开始和/或结束处是否有引号,这都是有效的。

编辑: 对不起,只能用 Scala

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

"[^\"][\\p{Print}]*[^\"]"

科特林

在 Kotlin,你可以使用 ABc0

例如。

string.removeSurrounding("\"")

当且仅当给定的 分界线字符串以 分界线开始并以 分界线结束时,从该字符串的开始和结束处移除给定的 分界线字符串。 否则将不变地返回此字符串。

源代码如下:

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
}

编辑: 刚刚意识到我应该指定只有当它们两个都存在时才能工作。否则字符串不被认为是带引号的。这样的场景出现在我使用 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\""

稍微修改一下@brcolow 的回答

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

我使用的东西很简单:

if(str.startsWith("\"") && str.endsWith("\""))
{
str = str.substring(1, str.length()-1);
}
public String removeDoubleQuotes(String request) {
return request.replace("\"", "");
}

好极了

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

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