जवाबों:
आप इसके लिए String#replaceAll()
एक पैटर्न के साथ उपयोग कर सकते हैं ^\"|\"$
।
उदाहरण के लिए
string = string.replaceAll("^\"|\"$", "");
नियमित अभिव्यक्तियों के बारे में अधिक जानने के लिए, कृपया http:// अनियमित-expression.info पर देखें ।
उस ने कहा, यह थोड़ा बदबू आ रही है जैसे आप एक सीएसवी पार्सर का आविष्कार करने की कोशिश कर रहे हैं। यदि हां, तो मैं मौजूदा पुस्तकालयों जैसे कि ओपनसीएसवी के लिए चारों ओर देखने का सुझाव दूंगा ।
String#indexOf()
, String#substring()
, तरीकों और इतने पर। यह केवल थोड़ा तेज है, लेकिन यह बहुत अधिक कोड है। @GK: उह, क्या आपने रेगेक्स को पढ़ा / समझा या फिर उसका परीक्षण किया?
^\"|\"$
:। |
का अर्थ है "या"। यह ^\"
या तो मैच होगा या \"$
। ^
मैच स्ट्रिंग की शुरुआत और स्ट्रिंग के $
अंत मैच। ^\"
इसका मतलब है कि स्ट्रिंग के शुरू में \"$
एक उद्धरण और स्ट्रिंग के अंत में एक उद्धरण से मेल खाता है।
स्ट्रिंग से पहला वर्ण और अंतिम वर्ण निकालने के लिए, उपयोग करें:
myString = myString.substring(1, myString.length()-1);
अपाचे के साथ भी 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("\"", "");
यह एक स्ट्रिंग के शुरू और अंत से दोहरे उद्धरणों को छीनने का सबसे अच्छा तरीका है।
someString.replace (/(^")|("$)/g, '')
अमरूद का उपयोग करके आप अधिक सुरुचिपूर्ण ढंग से लिख सकते हैं CharMatcher.is('\"').trimFrom(mystring);
सबसे पहले, हम यह देखने के लिए जाँच करते हैं कि क्या स्ट्रिंग दोगुनी है, और यदि ऐसा है, तो उन्हें हटा दें। आप सशर्त को छोड़ सकते हैं यदि वास्तव में आप जानते हैं कि यह डबल उद्धृत है।
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
कोटलिन में आप String.removeSurrounding (सीमांकक: चारसामान) का उपयोग कर सकते हैं
उदाहरण के लिए
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()
विधि मैंने ऊपर साझा की है , वह मेरे लिए देखी गई जिसे किसी भी जावा डेवलपर द्वारा आसानी से समझा जा सकता है।
@ Brcolow का उत्तर थोड़ा संशोधित करना
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
जाना चाहिए और इसे शायद इसके Objects.requireNonNull(string)
अंदर ऐसा कुछ होना चाहिए क्योंकि अगर कोई स्ट्रिपक्वाट्स (अशक्त) कह रहा है तो वे शायद गलती से ऐसा कर रहे हैं!
स्काला
s.stripPrefix("\"").stripSuffix("\"")
यह इस बात पर ध्यान दिए बिना काम करता है कि स्ट्रिंग के शुरू और / या अंत में उद्धरण नहीं हैं या नहीं।
संपादित करें: क्षमा करें, केवल स्काला
संपादित: बस एहसास हुआ कि मुझे यह निर्दिष्ट करना चाहिए कि यह तभी काम करता है जब दोनों मौजूद हों। अन्यथा स्ट्रिंग को उद्धृत नहीं माना जाता है। 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;
}
जावा में एक स्ट्रिंग की शुरुआत और अंत से एक या एक से अधिक दोहरे उद्धरण हटाने के लिए, आपको एक रेगेक्स आधारित समाधान का उपयोग करने की आवश्यकता है:
String result = input_str.replaceAll("^\"+|\"+$", "");
यदि आपको एकल उद्धरण निकालने की आवश्यकता है:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
नोट : यदि आपके स्ट्रिंग में "
अंदर है, तो यह दृष्टिकोण समस्याएँ पैदा कर सकता है (उदाहरण "Name": "John"
=> Name": "John
)।
एक जावा डेमो यहां देखें :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string