Saya ingin memangkas awal dan akhir kutipan ganda (") dari sebuah string.
Bagaimana saya bisa mencapainya di Jawa? Terima kasih!
Jawaban:
Anda bisa menggunakan String#replaceAll()
dengan pola ^\"|\"$
untuk ini.
Misalnya
string = string.replaceAll("^\"|\"$", "");
Untuk mempelajari lebih lanjut tentang ekspresi reguler, dapatkan al ook di http://regular-expression.info .
Meskipun demikian, baunya seperti Anda mencoba menciptakan parser CSV. Jika demikian, saya sarankan untuk melihat-lihat perpustakaan yang ada, seperti OpenCSV .
String#indexOf()
, String#substring()
, metode dan sebagainya. Ini hanya sedikit lebih cepat, tetapi lebih banyak kode. @GK: Eh, apakah Anda membaca / memahami regex atau bahkan mengujinya?
^\"|\"$
. |
berarti "atau". Dengan demikian akan cocok dengan salah satu ^\"
atau \"$
. ^
cocok dengan awal string dan $
cocok dengan akhir string. ^\"
Berarti cocok dengan kutipan di awal string dan \"$
cocok dengan kutipan di akhir string.
Untuk menghapus karakter pertama dan karakter terakhir dari string, gunakan:
myString = myString.substring(1, myString.length()-1);
Juga dengan 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"
Begitu,
final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more
Metode ini berfungsi baik dengan string yang dikutip dan tidak dikutip seperti yang ditunjukkan dalam contoh saya. Satu-satunya downside adalah, itu tidak akan mencari kutipan yang benar-benar cocok , hanya karakter kutipan di depan dan di belakang (yaitu, tidak ada perbedaan antara "partially
dan "fully"
kutipan string).
Ini adalah cara terbaik yang saya temukan, untuk menghapus tanda kutip ganda dari awal dan akhir string.
someString.replace (/(^")|("$)/g, '')
Jika tanda kutip ganda hanya ada di awal dan di akhir, kode sederhana seperti ini akan bekerja dengan sempurna:
string = string.replace("\"", "");
Dengan jambu biji, Anda bisa menulis dengan lebih elegan CharMatcher.is('\"').trimFrom(mystring);
Pertama, kami memeriksa untuk melihat apakah String dikutip dua kali lipat, dan jika demikian, hapus mereka. Anda dapat melewati persyaratan jika sebenarnya Anda tahu itu dikutip ganda.
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
Di Kotlin Anda dapat menggunakan String.removeSurrounding (pembatas: CharSequence)
Misalnya
string.removeSurrounding("\"")
Menghapus string pembatas yang diberikan dari awal dan akhir string ini jika dan hanya jika diawali dengan dan diakhiri dengan pembatas . Jika tidak, kembalikan string ini tidak berubah.
Kode sumbernya terlihat seperti ini:
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()
metode yang saya bagikan di atas menurut saya dapat dengan mudah dimengerti oleh pengembang java mana pun.
Untuk menghapus satu atau lebih tanda kutip ganda dari awal dan akhir string di Java, Anda perlu menggunakan solusi berbasis regex:
String result = input_str.replaceAll("^\"+|\"+$", "");
Jika Anda juga perlu menghapus tanda kutip tunggal:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
CATATAN : Jika string Anda berisi "
di dalam, pendekatan ini dapat menyebabkan masalah (misalnya "Name": "John"
=> Name": "John
).
Lihat demo Java di sini :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string
Mengubah sedikit jawaban @ brcolow
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
dan mungkin harus memiliki sesuatu seperti Objects.requireNonNull(string)
di dalamnya karena jika seseorang memanggil stripQuotes (null) mereka mungkin melakukannya karena kesalahan!
Diedit: Baru saja menyadari bahwa saya harus menentukan bahwa ini hanya berfungsi jika keduanya ada. Jika tidak, string tidak dianggap dikutip. Skenario seperti itu muncul pada saya saat bekerja dengan file 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;
}
Scala
s.stripPrefix("\"").stripSuffix("\"")
Ini berfungsi terlepas dari apakah string memiliki atau tidak memiliki tanda kutip di awal dan / atau akhir.
Edit: Maaf, hanya Scala
public String removeDoubleQuotes(String request) {
return request.replace("\"", "");
}