2010-04-09 9 views
81

मैं एक स्ट्रिंग से एक शुरुआत और समाप्त होने के दोहरे उद्धरण (") ट्रिम करने के लिए करना चाहते हैं।
मैं ऐसा कैसे हासिल कर सकते हैं जावा में? धन्यवाद!मैं स्ट्रिंग से डबल कोट्स को शुरू और समाप्त कैसे कर सकता हूं?

प्रत्येक दोहरे उद्धरण चिह्नों का
+1

स्ट्रिंग पहले से ही इसके चारों ओर उद्धरण के लिए जाना जाता है, या समस्या का उद्धरण भाग के लिए जाँच कर रहा है है? –

उत्तर

172

आप इस के लिए ^\"|\"$ का एक पैटर्न के साथ String#replaceAll() उपयोग कर सकते हैं।

जैसे

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

नियमित के बारे में अधिक जानने के लिए लार एक्सप्रेशन, 0 oपर अल ओक है।

उसने कहा, यह थोड़ा सा गंध करता है कि आप एक सीएसवी पार्सर का आविष्कार करने की कोशिश कर रहे हैं। यदि ऐसा है, तो मैं मौजूदा पुस्तकालयों के लिए चारों ओर देखने का सुझाव दूंगा, जैसे कि OpenCSV

+4

आपको नहीं लगता कि यह दोहरी कोट्स की सभी घटनाओं को खाली स्ट्रिंग के साथ बदल देगा बल्कि पहले और आखिरी। – GuruKulki

+0

मैं एक सीएसवी पार्सर नहीं बना रहा हूँ। मैं tinyfbclient का उपयोग कर एक फेसबुक ऐप बना रहा हूं और किसी कारण से यह मुझे दोहरे उद्धरणों को पीछे और समाप्त करने वाले उपयोगकर्ता का यूआईडी प्रदान करता है। – ufk

+1

@ufk: यह एक जटिल regex नहीं है। आप अन्यथा 'स्ट्रिंग # इंडेक्सऑफ()', 'स्ट्रिंग # सबस्ट्रिंग()', विधियों आदि के समूह के साथ परेशानी करना चाहते हैं। यह केवल थोड़ा सा तेज़ है, लेकिन यह बहुत अधिक कोड है। @ जीके: उह, क्या आपने रेगेक्स को पढ़/समझ लिया है या यहां तक ​​कि इसका परीक्षण भी किया है? – BalusC

0

खोज अनुक्रमित और वहाँ कोई रिक्त स्ट्रिंग डालें।

+2

लेकिन बीच में उद्धरण के लिए देखें ... –

+0

तो यह पहली अनुक्रमणिका और डबल qoute की अंतिम अनुक्रमणिका होना चाहिए। – GuruKulki

22

स्ट्रिंग से पहले चरित्र और अंतिम वर्ण निकालने के लिए, का उपयोग करें:

myString = myString.substring(1, myString.length()-1); 
+11

यह केवल इतना आवश्यक है कि उद्धरण * गारंटी * होना चाहिए। अगर कोई गारंटी नहीं है, तो आपको पहले इसे पहले जांचना होगा। – BalusC

+4

@ बालससी: निश्चित रूप से। प्रश्न के मेरे पढ़ने से, ऐसा लगता है कि स्ट्रिंग पहले से ही उद्धरण के लिए जाना जाता है। –

+0

। लम्बाई एक संपत्ति नहीं है – Martin

9

अमरूद का उपयोग करके आप अधिक सुंदर ढंग से दोहरे उद्धरण चिह्नों केवल शुरुआत और अंत में मौजूद हैं लिख सकते हैं CharMatcher.is('\"').trimFrom(mystring);

+1

क्या केवल एक वर्ण को ट्रिम करना संभव है? उदाहरण के लिए यदि मेरी स्ट्रिंग दो सिंगल कोट्स के साथ समाप्त होती है, तो भी मैं केवल एक ही उद्धरण प्राप्त करना चाहता हूं। –

1

, एक सरल कोड के रूप में इस पूरी तरह से काम करेगा:

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

0
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value); 
String strUnquoted = value; 
if (m.find()) { 
    strUnquoted = m.group(1); 
} 
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; 
} 
2

सबसे पहले, हम यह देखने के लिए जांचते हैं कि स्ट्रिंग को दोगुना उद्धृत किया गया है, और यदि ऐसा है, तो उन्हें हटा दें। यदि आप वास्तव में जानते हैं कि यह दोहरा उद्धृत है तो आप सशर्त छोड़ सकते हैं।

if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"') 
{ 
    string = string.substring(1, string.length() - 1); 
} 
+0

यह परिमाण के आदेशों द्वारा सबसे अधिक प्रचलित उत्तर है और यह भी निर्दिष्ट करता है कि उद्धरणों के वैकल्पिक या उपस्थिति के संबंध में क्या करना है। – entonio

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" उद्धृत तारों के बीच कोई भेद नहीं)।

9

स्ट्रिंग की शुरुआत और अंत से डबल कोट्स को पट्टी करने के लिए यह सबसे अच्छा तरीका है।

String result = input_str.replaceAll("^\"+|\"+$", ""); 

आप भी सिंगल कोट्स को दूर करने की जरूरत है:

someString.replace (/(^")|("$)/g, '') 
+1

हो सकता है कि एकल उद्धरण भी प्रतिस्थापित करें (/ (^ \ "| \ ') | (\" | \' $)/g, ""); – bob

0

शुरू और जावा में एक स्ट्रिंग के अंत से एक या अधिक दोहरे उद्धरण चिह्नों को निकालने के लिए आप एक regex आधारित समाधान का उपयोग करने की जरूरत है:

String result = input_str.replaceAll("^[\"']+|[\"']+$", ""); 

नोट: अपने स्ट्रिंग के अंदर " हो, तो यह दृष्टिकोण मुद्दों को जन्म दे सकता है (उदाहरण के लिए"Name": "John" =>Name": "John)।

एक Java demo here देखें:

String input_str = "\"'some string'\""; 
String result = input_str.replaceAll("^[\"']+|[\"']+$", ""); 
System.out.println(result); // => some string 
0

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

यह है कि क्या स्ट्रिंग है की परवाह किए बिना काम करता है या शुरू और/या अंत में उद्धरण नहीं है।

संपादित करें: माफ करना, स्काला केवल

संबंधित मुद्दे