2010-08-24 5 views
9

मेरे पास एक स्ट्रिंग है, "600sp" कहें जिससे मैं पूर्णांक भाग (600) प्राप्त करना चाहता हूं।"600sp" स्ट्रिंग का पूर्णांक भाग प्राप्त करने का सबसे अच्छा तरीका?

अगर मैं Integer.valueOf("600sp") कर मैं गैर-अंकीय मान "एस" जो स्ट्रिंग में सामना करना पड़ा है की वजह से एक अपवाद मिलता है।

पूर्णांक भाग को पकड़ने का सबसे तेज़ तरीका क्या है?

धन्यवाद!

+2

क्या संख्यात्मक भाग पहले प्रदर्शित होने की गारंटी है? क्या यह हमेशा एक तीन अंक संख्या है? –

+0

हाँ यह हमेशा एक चर लंबाई लंबाई के बाद एसपी है। –

उत्तर

13

अपने स्ट्रिंग प्रारूप हमेशा कुछ पात्रों के बाद संख्या होने जा रहा है, तो यह

mystr.split("[a-z]")[0] 
+0

लघु और प्यारा, सही - धन्यवाद। –

+0

ठंडा समाधान! – stratwine

+0

यदि कोई रिक्त स्ट्रिंग खिलाया जाता है तो यह क्रैश हो जाएगा, और अंतरराष्ट्रीय वर्णों के साथ स्ट्रिंग को खिलाए जाने पर अमान्य परिणाम उत्पन्न कर सकते हैं – Jherico

1

आप उपयोग कर सकते हैं

Integer.valueOf("0" + "600sp".replaceAll("(\\d*).*", "$1")) 

नोट:

इस regex के साथ आप केवल शुरुआती संख्या रखेंगे।


संपादित करें: "0" + क्रैश नहीं करने के लिए जब मैं कोई अंक प्रयोग किया जाता है। @ जेरिको!

+0

स्ट्रिंग में कोई अंक नहीं होने पर यह क्रैश हो जाएगा। – Jherico

+0

@ जेरिको: tks! मेरे द्वारा ठीक कर दिया जाएगा। – Topera

6

अपने इनपुट की कमी के आधार पर आप regex के साथ बंद सबसे अच्छा हो सकता है।

Pattern p = Pattern.compile("(\\d+)"); 
    Matcher m = p.matcher("600sp"); 
    Integer j = null; 
    if (m.find()) { 
     j = Integer.valueOf(m.group(1)); 
    } 

यह नियमित अभिव्यक्ति के रूप में 'मुझे स्ट्रिंग की शुरुआत में सन्निहित अंक के सेट दे जहां कम से कम 1 अंकों' अनुवाद करता है। यदि आपके पास पूर्णांक के विपरीत वास्तविक संख्याओं को पार्स करने जैसी अन्य बाधाएं हैं, तो आपको कोड को संशोधित करने की आवश्यकता है।

2

एक छोटे और कम विशिष्ट समाधान के लिए, अधिक संदर्भ जोड़ें।

StringBuffer numbers = new StringBuffer(); 
for(char c : "asdf600sp".toCharArray()) 
{ 
    if(Character.isDigit(c)) numbers.append(c); 
} 

System.out.println(numbers.toString()); 

नई जानकारी के प्रकाश में, एक बेहतर समाधान:

Integer.valueOf("600sp".replace("sp","")); 
1
कोशिश

यदि स्ट्रिंग की गारंटी है (जैसा कि आप कहते हैं) "एसपी" के बाद एक पूर्णांक होने के लिए, मैं एक और सामान्य सामान्य अभिव्यक्ति पार्सर का उपयोग करने के खिलाफ सलाह दूंगा, जो अन्य भिन्नताओं को भी स्वीकार करेगा (जिसे रेजे होना चाहिए त्रुटियों के रूप में cted)।

बस परीक्षण यह "sp" में समाप्त होता है, एक तो पिछले दो वर्णों के बिना स्ट्रिंग पार्स है।

+0

यह एक बहुत अच्छा मुद्दा है। धन्यवाद थिलो। –

2

मुझे पता है कि यह पहले से ही उत्तर दिया गया है, लेकिन आप java.util.Scanner पर विचार किया है? ऐसा लगता है कि रीगेक्स या अन्य जटिल स्ट्रिंग यूटिलिटीज के बिना पूरी तरह से बिल फिट बैठता है।

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