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"