回答:
このためのString#replaceAll()
柄でお使いいただけます^\"|\"$
。
例えば
string = string.replaceAll("^\"|\"$", "");
正規表現の詳細については、http: //regular-expression.infoをご覧ください。
つまり、これは、CSVパーサーを発明しようとしているような匂いがします。その場合は、OpenCSVなどの既存のライブラリを探してみることをお勧めします。
String#indexOf()
、String#substring()
、方法など。少しだけ速くなりますが、はるかに多くのコードです。@GK:ええと、正規表現を読んだり理解したり、テストしたりしましたか?
^\"|\"$
です。|
「または」を意味します。したがって、^\"
またはのいずれかに一致します\"$
。^
文字列の先頭と$
一致し、文字列の末尾と一致します。^\"
文字列の先頭の\"$
引用符に一致し、文字列の末尾の引用符に一致することを意味します。
文字列から最初の文字と最後の文字を削除するには、次を使用します。
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("\"", "");
Guavaを使用すると、よりエレガントに書くことができます CharMatcher.is('\"').trimFrom(mystring);
まず、文字列が二重引用符で囲まれているかどうかを確認し、二重引用符が付いている場合は削除します。二重引用符で囲まれていることがわかっている場合は、条件をスキップできます。
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
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
}
removeSurrounding()
上記で共有したメソッドは、Java開発者が簡単に理解できる可能性のあるものでした。
@brcolowの回答を少し変更する
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
べきであり、おそらくObjects.requireNonNull(string)
その中に何かがあるはずだと思います!
Scala
s.stripPrefix("\"").stripSuffix("\"")
これは、文字列の最初と最後に引用符があるかどうかに関係なく機能します。
編集:すみません、Scalaのみ
編集:両方が存在する場合にのみ機能することを指定する必要があることを認識しました。それ以外の場合、文字列は引用符で囲まれているとは見なされません。このようなシナリオは、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\""
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;
}
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