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

ufk*_*ufk 127 java string trim

我想从一个字符串修剪一个开头和结尾双引号(").
我怎样才能在Java中实现它?谢谢!

Bal*_*usC 230

您可以使用此String#replaceAll()模式^\"|\"$.

例如

string = string.replaceAll("^\"|\"$", "");
Run Code Online (Sandbox Code Playgroud)

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

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

  • @GK插入符表示搜索字符串的开头,美元符号表示其结束.这里的反斜杠"逃脱"以下引用,因此它被视为一个字符.所以这个正则表达式说,用空字符串替换所有出现的引用,或者在结尾处引用.正如要求的那样. (9认同)
  • 这是正则表达式分解:`^ \"| \"$`.`|`表示"或".因此它将匹配'^ \"`或`\"$`.`^`匹配字符串的开头,`$`匹配字符串的结尾.`^ \"`表示匹配字符串开头的引号,`\"$`匹配字符串末尾的引号. (7认同)
  • 难道你不认为它会用空字符串替换所有出现的双引号,而不是第一个和最后一个. (6认同)
  • @Marc:考虑到目前形式的问题,我不确定这是一个什么问题. (2认同)

Mic*_*ers 28

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

myString = myString.substring(1, myString.length()-1);
Run Code Online (Sandbox Code Playgroud)

  • 这只要求引号应该*保证*存在.如果无法保证,那么您需要事先检查一下. (16认同)
  • @BalusC:当然可以.从我对这个问题的解读看来,似乎已经知道该字符串有引号. (4认同)
  • @Martin:.length是数组的属性,但是.length()是String的方法。 (2认同)

sun*_*cyq 13

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

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


Yan*_*evi 12

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

someString.replace (/(^")|("$)/g, '')
Run Code Online (Sandbox Code Playgroud)

  • 也许也包括单引号 replace(/(^\"|\')|(\"|\'$)/g, ""); (3认同)

leg*_*ass 11

使用Guava,您可以更优雅地书写 CharMatcher.is('\"').trimFrom(mystring);

  • 是否可以只修剪单个字符?例如,如果我的字符串仍以两个单引号结尾,那么我只希望修剪单引号。 (2认同)

brc*_*low 10

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

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


rat*_*ath 10

还有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"
Run Code Online (Sandbox Code Playgroud)

所以,

final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more
Run Code Online (Sandbox Code Playgroud)

此方法适用于带引号和未带引号的字符串,如我的示例所示.唯一的缺点是,它不会寻找严格匹配的引号,只有前导和尾随引号字符(即没有区分"partially"fully"引用字符串).


utk*_*rsh 7

我正在使用这样简单的东西:

if(str.startsWith("\"") && str.endsWith("\""))
        {
            str = str.substring(1, str.length()-1);
        }
Run Code Online (Sandbox Code Playgroud)


Rya*_*ral 6

科特林

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

例如

string.removeSurrounding("\"")
Run Code Online (Sandbox Code Playgroud)

当且仅当它以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
}
Run Code Online (Sandbox Code Playgroud)