दिलचस्प पोस्ट
मुझे कैसे पता लगा सकता है कि मेरे एंड्रॉइड डिवाइस पर कोई विशेष पैकेज मौजूद है? नेविगेशनव्यू के भीतर आइटम पृष्ठभूमि और आइटम टेक्स्ट रंग को कैसे अनुकूलित करें? SQL इंजेक्शन जो mysql_real_escape_string () के आसपास हो जाता है UIScrollView के अंदर UITableView का उपयोग कैसे करें और एक सेल क्लिक प्राप्त करें? प्रोग्रामेटिक रूप से अश्लील चित्रों का पता लगाने का सबसे अच्छा तरीका क्या है? कैसे जावा से एसक्यूएल सर्वर संग्रहीत कार्यप्रणाली से टेबल-मान मापदंडों को पारित करने के लिए? मेरा कार्यक्रम बनाने का सबसे अच्छा तरीका क्या होगा? जावास्क्रिप्ट / अजाक्स में HTTP हेड अनुरोध? मेरे तालिका दृश्य में विभाजक रेखा से पहले सफेद स्थान एंड्रॉइड के डिफॉल्ट म्यूजिक प्लेयर या किसी अन्य संगीत प्लेयर को नियंत्रित करें फेसबुक जे एस एसडीके के एफबी.एपीआई ('/ आई') विधि मुझे ग्राफ़ एपीआई v2.4 + वेबपैक कोड को बाहर से कॉल करना (HTML स्क्रिप्ट टैग) मैं दिन-तिथि (पायथन) में कैसे परिवर्तित करूं? contenthitable div में भीतरी एचटीएमएल की जगह POM.xml में गुणों के रूप में मेवेन से कमांड लाइन तर्क पास करना

एक ज्ञात पैटर्न का उपयोग कर स्ट्रिंग से मूल्य पार्स करने के लिए sscanf के जावा बराबर क्या है?

इसलिए मैं सी पृष्ठभूमि से आया (मूलतः मूल रूप से, हालांकि मैंने लगभग 5 वर्षों तक उस भाषा का इस्तेमाल नहीं किया है) और मैं जावा में एक स्ट्रिंग से कुछ मानों को पार्स करने की कोशिश कर रहा हूं। सीआई में एसएसकेएनएफ का इस्तेमाल होगा जावा में लोगों ने मुझे "स्कैनर, या स्ट्रिंगटोकनाइज़र" का उपयोग करने के लिए कहा है, लेकिन मुझे नहीं पता कि उनका उद्देश्य कैसे हासिल किया जाए।

मेरा इनपुट स्ट्रिंग "17-मार्च -11 15.52.25.000000000" जैसा दिखता है सीआई में ऐसा कुछ करना होगा:

sscanf(thestring, "%d-%s-%d %d.%d.%d.%d", day, month, year, hour, min, sec, fracpart); 

लेकिन जावा में, मैं जो कर सकता हूं वह सब कुछ है:

 scanner.nextInt(); 

यह मुझे पैटर्न की जांच करने की इजाजत नहीं देता है, और "एमएआर" के लिए मुझे अंततः काम करने की ज़रूरत है:

 str.substring(3,6); 

भयानक! निश्चित रूप से एक बेहतर तरीका है?

Solutions Collecting From Web of "एक ज्ञात पैटर्न का उपयोग कर स्ट्रिंग से मूल्य पार्स करने के लिए sscanf के जावा बराबर क्या है?"

समस्या यह है कि जावा ने पैरामीटर (या संदर्भ से गुजरने) को सी या सी # के रूप में नहीं निकाला है।

लेकिन एक बेहतर तरीका (और अधिक ठोस) है नियमित अभिव्यक्ति का उपयोग करें:

 Pattern p = Pattern.compile("(\\d+)-(\\p{Alpha}+)-(\\d+) (\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)") Matcher m = p.matcher("17-MAR-11 15.52.25.000000000"); day = m.group(1); month= m.group(2); .... 

बेशक सी कोड अधिक संक्षिप्त है, लेकिन इस तकनीक का एक लाभ है: पैटर्न '% s' और '% d' से अधिक सटीक स्वरूप निर्दिष्ट करते हैं तो आप उस दिन को निर्दिष्ट करने के लिए \ d {2} का प्रयोग कर सकते हैं, बिल्कुल उसी दिन 2 अंकों की रचना करें।

स्कैनर का उपयोग करते हुए एक समाधान है:

 Scanner scanner = new Scanner("17-MAR-11 15.52.25.000000000"); Scanner dayScanner = new Scanner(scanner.next()); Scanner timeScanner = new Scanner(scanner.next()); dayScanner.useDelimiter("-"); System.out.println("day=" + dayScanner.nextInt()); System.out.println("month=" + dayScanner.next()); System.out.println("year=" + dayScanner.nextInt()); timeScanner.useDelimiter("\\."); System.out.println("hour=" + timeScanner.nextInt()); System.out.println("min=" + timeScanner.nextInt()); System.out.println("sec=" + timeScanner.nextInt()); System.out.println("fracpart=" + timeScanner.nextInt()); 

इन उदाहरणों में से कोई भी मेरे लिए वास्तव में संतोषजनक नहीं था इसलिए मैंने अपनी जावा एसएसकेएन यूटिलिटी बनाया:

https://github.com/driedler/java-sscanf/tree/master/src/util/sscanf

यहां हेक्स स्ट्रिंग को पार्स करने का एक उदाहरण है:

 String buffer = "my hex string: DEADBEEF\n" Object output[] = Sscanf.scan(buffer, "my hex string: %X\n", 1); System.out.println("parse count: " + output.length); System.out.println("hex str1: " + (Long)output[0]); // Output: // parse count: 1 // hex str1: 3735928559 

"17-मार्च -11 15.52.25.000000000" के लिए:

 SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yy HH.mm.ss.SSS"); try { Date parsed = format.parse(dateString); System.out.println(parsed.toString()); } catch (ParseException pe) { System.out.println("ERROR: Cannot parse \"" + dateString + "\""); } 

यह बहुत ही सुरुचिपूर्ण समाधान के रूप में से बहुत दूर है क्योंकि एक regex का उपयोग करने के साथ मिल जाएगा, लेकिन काम करना चाहिए।

 public static void stringStuffThing(){ String x = "17-MAR-11 15.52.25.000000000"; String y[] = x.split(" "); for(String s : y){ System.out.println(s); } String date[] = y[0].split("-"); String values[] = y[1].split("\\."); for(String s : date){ System.out.println(s); } for(String s : values){ System.out.println(s); } 

क्या आप नियमित अभिव्यक्ति की अवधारणा से परिचित हैं? जावा आपको पैटर्न वर्ग का उपयोग करके regex का उपयोग करने की क्षमता प्रदान करता है। इसे बाहर की जाँच करें: http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

आप अपने स्ट्रिंग की जांच कर सकते हैं कि:

 Matcher matcher = Pattern.match(yourString); matcher.find(); 

और फिर आपको मिले स्ट्रिंग को हेरफेर करने के लिए मैटचर द्वारा प्रदान किए गए तरीकों का उपयोग करें या नहीं।

System.in.read () एक और विकल्प है।