我想从字符串中修剪一个开头和结尾的双引号(“) 我怎样才能在Java中实现这一目标?谢谢!
答案 0 :(得分:221)
您可以使用String#replaceAll()
格式为^\"|\"$
。
E.g。
string = string.replaceAll("^\"|\"$", "");
要了解有关正则表达式的更多信息,请访问http://regular-expression.info。
那就是说,这有点像你试图发明一个CSV解析器。如果是这样,我建议您四处寻找现有的库,例如OpenCSV。
答案 1 :(得分:27)
要从字符串中删除第一个字符和最后一个字符,请使用:
myString = myString.substring(1, myString.length()-1);
答案 2 :(得分:11)
这是我找到的最好的方法,从字符串的开头和结尾删除双引号。
someString.replace (/(^")|("$)/g, '')
答案 3 :(得分:11)
使用Guava,您可以更优雅地编写CharMatcher.is('\"').trimFrom(mystring);
答案 4 :(得分:9)
如果双引号仅存在于开头和结尾,那么一个简单的代码就可以完美地运行:
string = string.replace("\"", "");
答案 5 :(得分:7)
还有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"
引用字符串之间没有区别。)
答案 6 :(得分:6)
首先,我们检查字符串是否加倍引用,如果是,则删除它们。你可以跳过条件,如果实际上你知道它是双引号。
SELECT to_char(trunc(request_date),'YYYY-MM-DD HH24:MI:SS') date_time
答案 7 :(得分:4)
在Kotlin中,您可以使用String.removeSurrounding(delimiter: CharSequence)
例如
cast worked.gmepch:0x100600030; pch:0x100600038
cast worked.gmepch:0x100600040; pch:0x100600048
cast did not work.gmepch:0x100600260; pch:0x100600260
cast did not work.gmepch:0x100202c30; pch:0x100202c30
cast did not work.gmepch:0x100600270; pch:0x100600270
当且仅当该字符串以 delimiter 开头和结束时,才从该字符串的开头和结尾删除给定的 delimiter 字符串。 否则,返回此字符串不变。
源代码如下:
string.removeSurrounding("\"")
答案 8 :(得分:2)
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;
}
答案 9 :(得分:2)
s.stripPrefix("\"").stripSuffix("\"")
无论字符串在开头和/或结尾处是否有引号,都可以使用。
编辑:抱歉,仅限Scala
答案 10 :(得分:2)
下面的模式与boolean condition = foo();
map = map.entrySet().stream().filter(entry -> "PLACEHOLDER".equals(entry.getKey()))
.map(key -> {
if (condition) {
return "Apple";
} else {
return "Netflix";
}
}).collect(Collectors.toMap(e -> e.getKey(), Map.Entry::getValue));
一起使用时,将匹配双引号之间的任何字符串,而不会影响字符串中双引号的出现:
java.util.regex.Matcher
答案 11 :(得分:1)
要从Java中的字符串的开头和结尾删除一个或多个双引号,您需要使用基于正则表达式的解决方案:
String result = input_str.replaceAll("^\"+|\"+$", "");
如果您还需要删除单引号:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
注意:如果您的字符串中包含"
,则此方法可能会导致问题(例如"Name": "John"
=> Name": "John
)。
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string
答案 12 :(得分:1)
我正在使用像这样简单的东西:
if(str.startsWith("\"") && str.endsWith("\""))
{
str = str.substring(1, str.length()-1);
}
答案 13 :(得分:0)
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
strUnquoted = m.group(1);
}
答案 14 :(得分:0)
找到每个双引号的索引并在那里插入一个空字符串。
答案 15 :(得分:0)
编辑:刚刚意识到,我应该指定仅当两者都存在时才有效。否则,该字符串将不被引用。当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\""
答案 16 :(得分:0)
稍微修改@brcolow的答案
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
答案 17 :(得分:0)
public String removeDoubleQuotes(String request) {
return request.replace("\"", "");
}
答案 18 :(得分:0)
您可以使用 groovy 中的正则表达式从字符串中减去子字符串:
String unquotedString = theString - ~/^"/ - ~/"$/