我想从字符串中删除开头和结尾的双引号(“)。 我如何在 Java 中实现这一点? 谢谢!
查找每个双引号的索引并在其中插入一个空字符串。
您可以将 String#replaceAll()与 ^\"|\"$模式一起使用。
String#replaceAll()
^\"|\"$
例如。
string = string.replaceAll("^\"|\"$", "");
要了解有关正则表达式的更多信息,请查看 http://regular-expression.info。
也就是说,这闻起来有点像您正在尝试发明一个 CSV 解析器。如果是这样,我建议查找现有的库,比如 OpenCSV。
要从字符串中删除第一个字符和最后一个字符,请使用:
myString = myString.substring(1, myString.length()-1);
使用番石榴你可以写出更优雅的 CharMatcher.is('\"').trimFrom(mystring);
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()
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"引号字符串之间没有区别)。
"partially
"fully"
这是我发现的最好的方法,从字符串的开头和结尾去掉双引号。
someString.replace (/(^")|("$)/g, '')
要从 Java 中的字符串的开头和结尾删除一个或多个双引号,需要使用基于正则表达式的解决方案:
String result = input_str.replaceAll("^\"+|\"+$", "");
如果还需要删除单引号:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
注意 : 如果字符串中包含 ",这种方法可能会导致问题(例如,"Name": "John" = > Name": "John)。
"
"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一起使用时,将匹配双引号之间的任何字符串,而不会影响字符串中出现双引号:
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 - ~/^"/ - ~/"$/