2009-09-24 11 views
14

मैं पाठ के इस पंक्तियाँ तरह उद्धरण की संख्या को बदल सकता है:जावा में उद्धरण के बीच डेटा कैसे प्राप्त करें?

Here just one "comillas" 
But I also could have more "mas" values in "comillas" and that "is" the "trick" 
I was thinking in a method that return "a" list of "words" that "are" between "comillas" 

कैसे मैं उद्धरण के बीच डेटा प्राप्त परिणाम ?: होना चाहिए

Comillas
मास, Comillas, चाल
एक, शब्द, कर रहे हैं, Comillas

+0

ओह तुम मतलब है, कि पाठ की पंक्ति है? – OscarRyz

उत्तर

34

आप इस तरह की जानकारी के बाहर मछली को नियमित अभिव्यक्ति का उपयोग कर सकते हैं।

Pattern p = Pattern.compile("\"([^\"]*)\""); 
Matcher m = p.matcher(line); 
while (m.find()) { 
    System.out.println(m.group(1)); 
} 

इस उदाहरण मानता है कि लाइन की भाषा एक भी तरह तार के लिए पार्स किया जाता स्ट्रिंग शाब्दिक के बीच डबल-उद्धरण के लिए भागने दृश्यों का समर्थन नहीं करता, तार कि अवधि से अधिक "लाइनों" होते हैं, या समर्थन अन्य डेलीमीटर -quote।

+0

क्षमा करें, मैं वहां एक डबल कोट खो रहा था, खुद! – erickson

+0

हां, आपका कोड चाल बनाता है – atomsfat

0
String line = "if(getip(document.referrer)==\"www.eg.com\" || getip(document.referrer)==\"192.57.42.11\""; 
StringTokenizer stk = new StringTokenizer(line, "\""); 
stk.nextToken(); 
String egStr = stk.nextToken(); 
stk.nextToken(); 
String ipStr = stk.nextToken(); 
+1

मैं पहले से ही आपके समाधान का प्रयास करता हूं और अपाचे कॉमन्स और स्ट्रॉकाइज़र का उपयोग करके अपाचे कॉमन्स और काम करता हूं लेकिन यहां समस्या यह है कि यह केवल 2 जोड़ी से अधिक हो सकता है, शायद सिर्फ एक जोड़ी हो सकता है, या शायद – atomsfat

0

सबसे पहले, कृपया ध्यान दें कि आपको चाहिए उपयोगकर्ता के बराबर होती है() के बजाय == से। डिफ़ॉल्ट रूप से "==" पूछता है कि क्या वे स्मृति में एक ही उदाहरण हैं, जो स्ट्रिंग्स में कभी-कभी मामला हो सकता है। MyString.equals ("...") के साथ आप स्ट्रिंग्स के मानों की तुलना कर रहे हैं।

उद्धरण के बीच मूल्यों को आप कैसे प्राप्त करते हैं, मुझे यकीन नहीं है कि आपका क्या मतलब है। "..." एक वास्तविक वस्तु है। वैकल्पिक रूप से आप कर सकते हैं:

स्ट्रिंग webUrl = "www.eg.com";

+2

मुझे यकीन नहीं है कि टेक्स्ट की रेखा वह पार्सिंग जावा स्रोत कोड है। यह एक और लिपि हो सकती है कि वह कुछ जानकारी निकालने के लिए जावा प्रोग्राम से पढ़ने की कोशिश कर रहा है। – erickson

+0

मुझे लगता है कि पाठ जावास्क्रिप्ट स्रोत है। –

0

यदि आप केवल एक पंक्ति के बजाय एक संपूर्ण स्रोत फ़ाइल को पार्स कर रहे हैं, तो फ़ंक्शन के व्याकरण के आधार पर एक पार्सर तारों के आधार पर ऐसा करने का प्रयास करने से सुरक्षित विकल्प हो सकता है।

मुझे लगता है कि ये आपके व्याकरण में स्ट्रिंग अक्षर होंगे।

12

बाहर चेक StringUtils अपाचे कॉमन्स-लैंग पुस्तकालय में - यह एक substringsBetween विधि है।

String lineOfText = "if(getip(document.referrer)==\"www.eg.com\" || getip(document.referrer)==\"192.57.42.11\""; 

String[] valuesInQuotes = StringUtils.substringsBetween(lineOfText , "\"", "\""); 

assertThat(valuesInQuotes[0], is("www.eg.com")); 
assertThat(valuesInQuotes[1], is("192.57.42.11")); 
0

आप एक फ़ाइल से सभी आवृत्तियों प्राप्त करना चाहते हैं:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class testReadQuotes { 


    public static void main(String args[]) throws IOException{ 

     Pattern patt = Pattern.compile("\"([^\"]*)\""); 
     BufferedReader r = new BufferedReader(new FileReader("src\\files\\myFile.txt")); 

     String line; 

     while ((line = r.readLine()) != null) { 

      Matcher m = patt.matcher(line); 

      while (m.find()) { 
      System.out.println(m.group(0)); 
      } 

     } 

    } 

}