我想从字符串中修剪开始和结束的双引号(“)。
我怎样才能在 Java 中实现呢?谢谢!
19 回答
您可以使用String#replaceAll()
这种模式^\"|\"$
。
例如
string = string.replaceAll("^\"|\"$", "");
要了解有关正则表达式的更多信息,请访问http://regular-expression.info。
也就是说,这听起来有点像您正在尝试发明 CSV 解析器。如果是这样,我建议四处寻找现有的库,例如OpenCSV。
要从字符串中删除第一个字符和最后一个字符,请使用:
myString = myString.substring(1, myString.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"
引用的字符串)。
如果双引号只存在于开头和结尾,那么一个简单的代码就可以完美地工作:
string = string.replace("\"", "");
这是我发现的最好的方法,从字符串的开头和结尾去除双引号。
someString.replace (/(^")|("$)/g, '')
首先,我们检查字符串是否被双引号,如果是,则删除它们。如果实际上您知道它是双引号,则可以跳过条件。
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
使用 Guava 你可以写得更优雅CharMatcher.is('\"').trimFrom(mystring);
科特林
在 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
}
I am using something as simple as this :
if(str.startsWith("\"") && str.endsWith("\""))
{
str = str.substring(1, str.length()-1);
}
编辑:刚刚意识到我应该指定这只有在它们都存在时才有效。否则,该字符串不被视为引用。在处理 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\""
要在 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
下面的模式,当与 一起使用时java.util.regex.Matcher
,将匹配双引号之间的任何字符串,而不会影响字符串中双引号的出现:
"[^\"][\\p{Print}]*[^\"]"
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
strUnquoted = m.group(1);
}
public String removeDoubleQuotes(String request) {
return request.replace("\"", "");
}
稍微修改@brcolow的答案
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 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;
}
斯卡拉
s.stripPrefix("\"").stripSuffix("\"")
无论字符串的开头和/或结尾是否有引号,这都有效。
编辑:抱歉,仅限 Scala
查找每个双引号的索引并在那里插入一个空字符串。
时髦的
您可以使用 groovy 中的正则表达式从字符串中减去子字符串:
String unquotedString = theString - ~/^"/ - ~/"$/