170

文字列から最初と最後の二重引用符( ")を削除したいの
ですが、Javaでこれを実現するにはどうすればよいですか?ありがとうございます。

4

19 に答える 19

294

String#replaceAll()このためのパターンで使用できます^\"|\"$

例えば

string = string.replaceAll("^\"|\"$", "");

正規表現の詳細については、 http: //regular-expression.infoを参照してください。

そうは言っても、これは、CSVパーサーを発明しようとしているようなにおいがします。もしそうなら、 OpenCSVなどの既存のライブラリを探すことをお勧めします。

于 2010-04-09T15:29:48.560 に答える
37

文字列から最初の文字と最後の文字を削除するには、次を使用します。

myString = myString.substring(1, myString.length()-1);
于 2010-04-09T15:31:29.403 に答える
22

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")。

于 2016-03-23T14:34:33.313 に答える
17

二重引用符が最初と最後にのみ存在する場合、このような単純なコードは完全に機能します。

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

于 2014-08-22T16:57:31.093 に答える
15

これは、文字列の最初と最後から二重引用符を取り除くために私が見つけた最良の方法です。

someString.replace (/(^")|("$)/g, '')
于 2016-07-25T13:05:54.933 に答える
13

まず、文字列が二重引用符で囲まれているかどうかを確認し、二重引用符で囲まれている場合は削除します。二重引用符で囲まれていることが実際にわかっている場合は、条件をスキップできます。

if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
    string = string.substring(1, string.length() - 1);
}
于 2015-12-21T23:18:05.877 に答える
12

Guavaを使用すると、よりエレガントに書くことができますCharMatcher.is('\"').trimFrom(mystring);

于 2014-04-10T09:20:34.957 に答える
11

Kotlin

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
}
于 2018-07-22T22:03:16.920 に答える
5

私はこれと同じくらい単純なものを使用しています:

if(str.startsWith("\"") && str.endsWith("\""))
        {
            str = str.substring(1, str.length()-1);
        }
于 2020-09-08T05:46:40.443 に答える
4

編集:両方が存在する場合にのみこれが機能することを指定する必要があることに気づきました。それ以外の場合、文字列は引用符で囲まれているとは見なされません。このようなシナリオは、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\""
于 2019-01-27T10:05:49.410 に答える
3

Javaで文字列の最初と最後から1つ以上の二重引用符を削除するには、正規表現ベースのソリューションを使用する必要があります。

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
于 2016-12-23T09:23:49.563 に答える
3

以下のパターンは、と一緒に使用するとjava.util.regex.Matcher、文字列内の二重引用符の出現に影響を与えることなく、二重引用符の間の任意の文字列に一致します。

"[^\"][\\p{Print}]*[^\"]"
于 2018-07-21T19:41:13.030 に答える
2
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
    strUnquoted = m.group(1);
}
于 2015-09-18T08:21:15.123 に答える
2

@brcolowの回答を少し変更する

if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
    string = string.substring(1, string.length() - 1);
}
于 2019-04-24T17:51:14.427 に答える
2
public String removeDoubleQuotes(String request) {
    return request.replace("\"", "");
}
于 2020-10-02T18:40:15.173 に答える
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;
}
于 2015-12-18T20:31:43.973 に答える
1

Scala

s.stripPrefix("\"").stripSuffix("\"")

これは、文字列の先頭または末尾に引用符があるかどうかに関係なく機能します。

編集:申し訳ありませんが、Scalaのみ

于 2017-11-23T14:54:38.177 に答える
0

各二重引用符のインデックスを見つけて、そこに空の文字列を挿入します。

于 2010-04-09T15:29:30.173 に答える
0

Groovy

groovyの正規表現を使用して、文字列から部分文字列を減算できます。

String unquotedString = theString - ~/^"/ - ~/"$/
于 2021-01-28T01:03:30.033 に答える