सवाल स्ट्रिंग के भीतर सभी डबल कोट्स बदलें


मैं डेटाबेस से डेटा पुनर्प्राप्त कर रहा हूं जहां एक फ़ील्ड में HTML डेटा के साथ स्ट्रिंग शामिल है। मैं सभी डबल कोट्स को प्रतिस्थापित करना चाहता हूं जैसे कि इसका उपयोग किया जा सके parseJSON का jQuery

जावा का उपयोग करके मैं उद्धरणों को प्रतिस्थापित करने की कोशिश कर रहा हूं ..

details.replaceAll("\"","\\\"");
  //details.replaceAll("\"","&quote;"); details.replaceAll("\"","&#34");

अल lthis रास्ता कोशिश की है, लेकिन परिणामस्वरूप स्ट्रिंग परिवर्तन नहीं दिखाता है। O'reily लेख निर्धारित करता है लेख अपाचे स्ट्रिंग utils। क्या कोई और तरीका है??

कोई regex या कुछ?


44
2018-03-19 12:11


मूल




जवाब:


ऐसे

String details = "Hello \"world\"!";
details = details.replace("\"","\\\"");
System.out.println(details);               // Hello \"world\"!

ध्यान दें कि तार हैं अडिग, इस प्रकार यह बस करने के लिए पर्याप्त नहीं है details.replace("\"","\\\"")। आपको चर को पुन: असाइन करना होगा details परिणामी स्ट्रिंग के लिए।


का उपयोग करते हुए

details = details.replaceAll("\"","&quote;");

इसके बजाए, परिणाम

Hello &quote;world&quote;!

83
2018-03-19 12:14



के लिए +1 स्ट्रिंग अपरिवर्तनीय है। - Paŭlo Ebermann
मेरी स्ट्रिंग इस तरह होगी: एबीसी <a href="fsgdfs"> <div id = "id1"> df </ div> ... मैं यह सुनिश्चित करने के लिए उद्धरण को हटाना चाहता हूं कि इसे JSON द्वारा पार्स किया जाए। तो और उद्धरण; एचटीएमएल के लिए एक बीआरटी रास्ता हो सकता है, विचार था। - MalTec
+1 भूल गया स्ट्रिंग अपरिवर्तनीय है :) - Tasawer Khan


ऐसा नहीं होना चाहिए:

.replaceAll("\"","\\\\\"")

प्रतिस्थापन स्ट्रिंग में पांच बैकस्लाश।


28
2017-12-06 00:16



हाँ, अगर आप का उपयोग करना था replaceAll(), यह सही तरीका होगा। यही कारण है कि हर कोई उपयोग करने के लिए कह रहा है replace() बजाय। ;) - Alan Moore
सिर्फ एक घंटे का बेहतर हिस्सा बिताया कि मेरा क्यों replaceAll() काम नहीं कर रहा था पूरी तरह से भूल गया कि एक था replace() विधि भी - Ben
प्रतिस्थापन () का उपयोग करते हुए 3 बैकस्लैश क्यों - replaceAll () का उपयोग कर 5 बैकस्लेश? - Ida
मुझे लगता है कि जवाब विधि हस्ताक्षर में है। इस मामले में विधि को प्रतिस्थापित करें वास्तव में प्रतिस्थापित होता है (CharSequence cs, charSequence cs1) और प्रतिस्थापित करें सभी को प्रतिस्थापित किया जाता है सभी (स्ट्रिंग स्ट्रिंग, स्ट्रिंग स्ट्रिंग 1)। पैरामीटर के रूप में स्ट्रिंग को पास करने के लिए आपको उन अतिरिक्त बैकस्लाश की आवश्यकता होती है। - vinay


मुझे लगता है कि इस स्थिति में एक रेगेक्स एक ओवरकिल है। यदि आप बस अपनी स्ट्रिंग में सभी उद्धरणों को हटाना चाहते हैं तो मैं इस कोड का उपयोग करूंगा:

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

6
2018-03-19 12:13





इसे JSON में काम करने के लिए, आपको उससे कुछ और चरित्र से बचने की आवश्यकता है।

myString.replace("\\", "\\\\")
    .replace("\"", "\\\"")
    .replace("\r", "\\r")
    .replace("\n", "\\n")

और यदि आप उपयोग करने में सक्षम होना चाहते हैं json2.js इसे पार्स करने के लिए आपको भी बचने की जरूरत है

   .replace("\u2028", "\\u2028")
   .replace("\u2029", "\\u2029")

जो जेएसओएन उद्धृत तारों के अंदर की अनुमति देता है, लेकिन कौन सी जावास्क्रिप्ट नहीं करता है।


4
2018-03-19 12:20



मैं jquery 1.5 का उपयोग कर रहा हूँ .. क्या मुझे यह सब चाहिए? - MalTec
@MalTec, यदि आपकी स्ट्रिंग में बैकस्लैश हो सकती है, तो हाँ। विचार करें कि आपकी स्ट्रिंग है या नहीं '\\"'। यदि आप इसे उद्धरणों में लपेटते हैं और केवल उद्धरण से बचते हैं, तो आपको मिलता है "\\"" जो एक अवैध स्ट्रिंग है। यदि आपकी स्ट्रिंग में न्यूलाइन हो सकती है, तो आपको उनसे बचने की भी आवश्यकता है। JQuery में स्ट्रिंग के अंदर न्यूलाइन की अनुमति नहीं है। - Mike Samuel


मुझे पता है कि उत्तर पहले से ही स्वीकार कर लिया गया है, लेकिन जब मैं डबल कोट्स और सिंगल कोट्स से बचने की कोशिश करता हूं तो मैं बस जो साझा करता हूं उसे साझा करना चाहता था।

यहां मैंने जो किया है: और यह काम करता है :)

पलायन करना डबल उद्धरण:

    if(string.contains("\"")) {
        string = string.replaceAll("\"", "\\\\\"");
    }

और भागने के लिए एकल कोट:

    if(string.contains("\'")) {
        string = string.replaceAll("\'", "\\\\'");
    }

पीएस: कृपया ऊपर इस्तेमाल की गई बैकस्लैश की संख्या पर ध्यान दें।


3
2018-03-05 14:05



प्रतिस्थापन के लिए पांच बैकस्लैश की आवश्यकता क्यों है डबल कोट्स को एस्केप करने के लिए? प्रत्येक बैकस्लैश का कार्य क्या है? - user1169587
मुझे स्ट्रिंग = string.replaceAll मिला ("\" "," "); पहले से ही काम करता है, आउटपुट स्ट्रिंग पहले से ही सभी डबल कोट्स को हटा देता है - user1169587


यह एक स्ट्रिंग में डबल कोट्स को हटाने के लिए है।

str1 = str.replace(/"/g, "");
alert(str1);

2
2017-07-23 11:54



ओपी जावा के लिए एक जवाब चाहता था। - Matthew Jacobs


निम्नलिखित रेगेक्स दोनों के लिए काम करेगा:

  text = text.replaceAll("('|\")", "\\\\$1");

0
2017-10-31 01:54