java - 如何从字符串中修剪开始和结束双引号?

我想从一个字符串中修剪一个开头和结尾的双引号(")。

我怎样才能在Java中实现这一目标? 谢谢!


您可以使用^\"|\"$,格式为^\"|\"$。

例如。

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

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

也就是说,这有点像你试图发明一个CSV解析器。 如果是这样,我建议四处寻找现有的库,比如OpenCSV。


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

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


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


这是我找到的最好的方法,从字符串的开头和结尾删除双引号。

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


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

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


首先,我们检查String是否加倍引用,如果是,则删除它们。 你可以跳过条件,如果实际上你知道它是双引号。

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


还有Apache "partially:

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


科特林

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

例如。

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
}


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;
}


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

无论字符串是否在开头和/或结尾都有引号,这都可以工作。

编辑:对不起,仅限Scala


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

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


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


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


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


修改@ brcolow的回答了一下

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


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