Yanıtlar:
Bunun için String#replaceAll()
bir desenle kullanabilirsiniz ^\"|\"$
.
Örneğin
string = string.replaceAll("^\"|\"$", "");
Normal ifadeler hakkında daha fazla bilgi edinmek için http://regular-expression.info adresini ziyaret edin .
Bununla birlikte, bu bir CSV ayrıştırıcısı icat etmeye çalıştığınız gibi kokuyor. Eğer öyleyse, OpenCSV gibi mevcut kütüphaneleri aramanızı öneririm .
String#indexOf()
,, String#substring()
vb. Yöntemlerle uğraşmak isteyebilirsiniz . Sadece biraz daha hızlı, ama çok daha fazla kod. @GK: Ah, normal ifadeyi okudun / anladın, hatta test ettin mi?
^\"|\"$
. |
"veya" anlamına gelir. Böylece ya eşleşir ya ^\"
da \"$
. ^
dizenin başlangıcıyla ve dizenin $
sonuyla eşleşir. ^\"
, dizenin başındaki \"$
bir alıntıyla eşleşir ve dizenin sonundaki bir alıntıyla eşleşir.
Dizeden ilk karakteri ve son karakteri kaldırmak için şunu kullanın:
myString = myString.substring(1, myString.length()-1);
Ayrıca Apache ile 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"
Yani,
final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more
Bu yöntem, örneğimde gösterildiği gibi hem alıntılanmış hem de alıntılanmamış dizelerle çalışır. Tek dezavantajı, kesinlikle eşleşen tırnaklar için değil , sadece önde gelen ve sondaki alıntı karakterleri (yani. "partially
Ve "fully"
alıntılanan dizeler arasında ayrım yok) aramayacaktır .
Çift tırnak işaretleri yalnızca başlangıçta ve sonunda varsa, basit bir kod mükemmel şekilde çalışır:
string = string.replace("\"", "");
Bu, bir dizenin başından ve sonundan çift tırnak ayırmak için bulduğum en iyi yoldur.
someString.replace (/(^")|("$)/g, '')
Guava'yı kullanarak daha zarif yazabilirsiniz CharMatcher.is('\"').trimFrom(mystring);
İlk olarak, Dizenin iki katına çıkarılıp alıntılanmayacağını kontrol ediyoruz ve eğer öyleyse bunları kaldırıyoruz. Aslında çift tırnak içine alındığını biliyorsanız, koşulu atlayabilirsiniz.
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
KOTLIN olarak kullanabileceğiniz String.removeSurrounding (sınırlayıcı: CharSequence)
Örneğin
string.removeSurrounding("\"")
Belirli bir sınırlayıcı dizesini, yalnızca ve sınırlayıcı ile başlayıp bitiyorsa, bu dizenin hem başından hem de sonundan kaldırır . Aksi takdirde bu dizeyi değiştirmeden döndürür.
Kaynak kodu şuna benzer:
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()
yukarıda paylaştığım yöntem bana herhangi bir java geliştiricisi tarafından kolayca anlaşılabilecek bir şekilde baktı.
@ Brcolow'un cevabını biraz değiştirerek
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
ve muhtemelen biri gibi bir şey olmalı Objects.requireNonNull(string)
düşünürdüm çünkü birisi stripQuotes (null) çağırıyor, muhtemelen yanlışlıkla yapıyorlar!
Scala
s.stripPrefix("\"").stripSuffix("\"")
Bu, dizenin başında ve / veya sonunda tırnak olup olmamasına bakılmaksızın çalışır.
Düzenle: Üzgünüz, sadece Scala
Düzenlendi: Bunun yalnızca her ikisi de varsa işe yaradığını belirtmem gerektiğini fark ettim. Aksi takdirde dize tırnak içine alınmaz. CSV dosyalarıyla çalışırken bu senaryo benim için ortaya çıktı.
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'da bir dizenin başlangıcından ve sonundan bir veya daha fazla çift tırnak işareti kaldırmak için normal ifade tabanlı bir çözüm kullanmanız gerekir:
String result = input_str.replaceAll("^\"+|\"+$", "");
Tek tırnakları da kaldırmanız gerekiyorsa:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
NOT : Dizeniz "
içeride içeriyorsa , bu yaklaşım sorunlara yol açabilir (örn. "Name": "John"
=> Name": "John
).
Burada bir Java demosuna bakın :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string