2009-08-20 19 views
9

संभव डुप्लिकेट पूर्णांक तक:
how can I convert String to Int ?Convert स्ट्रिंग

हाय,

मैं निम्नलिखित समस्या एक पूर्णांक के लिए स्ट्रिंग परिवर्तित:

string str = line.Substring(0,1); 

//This picks an integer at offset 0 from string 'line' 

तो अब स्ट्रिंग str में इसमें एक पूर्णांक होता है। मैं निम्नलिखित कर रहा हूं:

int i = Convert.ToInt32(str); 

यदि मैं निम्नलिखित कथन सही लिखता हूं तो मुझे एक पूर्णांक प्रिंट करना चाहिए?

Console.WriteLine(i); 

यह किसी भी त्रुटि के बिना संकलित लेकिन क्रम पर निम्न त्रुटि देता है:

प्रकार 'System.FormatException' की एक बिना क्रिया का अपवाद mscorlib.dll में हुआ

अतिरिक्त जानकारी: इनपुट स्ट्रिंग नहीं था एक सही प्रारूप में।

कोई मदद कृपया?

+0

इसे जिस भाषा का उपयोग कर रहे हैं उसके साथ टैग करें। – sal

+0

यदि आप लाइन चर के अंदर स्ट्रिंग मान प्रदान कर सकते हैं तो यह त्रुटि का पता लगाने के लिए और अधिक आसान हो सकता है। – rahul

+0

यह कई बार एक डुप्लिकेट है, कृपया http://stackoverflow.com/questions/1019793/how-can-i-convert-string-to-int, http://stackoverflow.com/questions/952469/convert देखें -स्ट्रिंग-टू-इंट, http://stackoverflow.com/questions/887586/convert-string-to-int। –

उत्तर

18

Convert.ToInt32(string) का उपयोग करने के बजाय आपको Int32.TryParse(string, out int) का उपयोग करने पर विचार करना चाहिए। उपयोगकर्ता द्वारा प्रदान किए गए इनपुट को सुरक्षित तरीके से निपटने में सहायता के लिए TryParse विधियां हैं। आपकी त्रुटि का सबसे संभावित कारण यह है कि आप जिस सबस्ट्रिंग को लौट रहे हैं वह एक पूर्णांक मान का अमान्य स्ट्रिंग प्रस्तुति है।

string str = line.Substring(0,1); 
int i = -1; 
if (Int32.TryParse(str, out i)) 
{ 
    Console.WriteLine(i); 
} 
+0

कोड के टुकड़े के लिए धन्यवाद..मैं कल इसे आजमाउंगा क्योंकि मेरे पास अभी मेरे वर्कस्टेशन तक पहुंच नहीं है .. कल यहां आउटपुट अपडेट करें..जो कुछ भी हो सकता है .. फिर से धन्यवाद – zack

+0

सेटिंग के लिए क्या कारण है मैं आपूर्ति किए गए उदाहरण में -1 -1? यह मुझे बताता है कि एक असफल पार्स के बाद आप किसी भी तरीके से -1 के लिए परीक्षण कर सकते हैं लेकिन अगर पार्स –

0

यह पूरी तरह से संभव है कि वहां कुछ सफेद जगह है। ट्रिम करने के लिए कुछ चलने का प्रयास करें() (मुझे यकीन नहीं है कि आप किस भाषा में हैं) जो सफेद स्थान को पट्टी कर देगा। साथ ही, यह सुनिश्चित करने के लिए स्ट्रिंग को प्रिंट करने का प्रयास करें कि वास्तव में इसका सही हिस्सा है। हम सब किया है कि :)

+0

ठीक है, जब मैं कंसोल का उपयोग कर कंसोल पर स्ट्रिंग आउटपुट करता हूं। राइटलाइन (स्ट्र) यह एक प्रतीक (मूल रूप से एक स्माइली) प्रिंट करता है और चूंकि मैं गिनती 1 के रूप में देता हूं, मुझे नहीं लगता कि पूर्णांक को छोड़कर कोई अन्य चरित्र हो सकता है (जो एक स्माइली के रूप में मुद्रित हो रहा है)। मैं दृश्य स्टूडियो 2005 में सी # का उपयोग कर रहा हूं। – zack

+1

यदि कंसोल इसे किसी भी पूर्णांक के रूप में प्रिंट नहीं कर सकता है, तो मुझे लगता है कि यह एक पूर्णांक नहीं है। मैं यहां गलत हो सकता हूं, लेकिन इस विधि की मेरी समझ एक पूर्णांक के स्ट्रिंग प्रस्तुति को परिवर्तित करना है, 1234 के पूर्णांक-डेटाटाइप प्रतिनिधित्व में "1234" कहें, उदाहरण के लिए आप गणित कर सकते हैं। क्या आप यही करने की कोशिश कर रहे हैं? –

1

FormatException

मूल्य एक वैकल्पिक संकेत अंक (9 के माध्यम से 0) के एक दृश्य के बाद शामिल नहीं है।

अपवाद है कि फेंक दिया जाता है जब एक बहस के प्रारूप लागू विधि का पैरामीटर विनिर्देशों को पूरा नहीं करता है।

यदि आप इस तरह के अपवाद उत्पन्न नहीं करना चाहते हैं तो आप Int32.TryParse का उपयोग कर सकते हैं।

Int32.TryParse: अपने 32-बिट पर हस्ताक्षर किए पूर्णांक बराबर करने के लिए एक नंबर की स्ट्रिंग प्रतिनिधित्व रूपांतरित करता है। एक वापसी मूल्य इंगित करता है कि ऑपरेशन सफल हुआ था या नहीं।

0

ऐसा नहीं है कि अपने इनपुट नहीं एक वैध स्वरूप है संभावना है। इसके बजाए इसे आजमाएं। यदि संख्या मान्य नहीं है, तो इसे एक त्रुटि आउटपुट करना चाहिए।

ध्यान रखें कि स्ट्रिंग में एक वैकल्पिक चिह्न होना चाहिए जिसके बाद एक संख्या होनी चाहिए।

string line = "23"; // or whatever. 
string str = line.Substring(0,1); 
int i = 0; 
if (Int32.TryParse(str, out i)) { 
    Console.WriteLine(i); 
} else { 
    Console.WriteLine ("Error converting '" + line + "', '" + str + "'."); 
} 

एक बात जो आप देख सकते उदाहरण के लिए "-1" में प्रवेश उपयोगकर्ता है। यदि आप उस पर substring(0,1) करते हैं, तो आपको केवल "-" मिलेगा जो वास्तव में मान्य नहीं है।

0

क्या आप सुनिश्चित हैं कि str में वापस दिया गया मान एक int है, यदि आप विजुअल स्टूडियो का उपयोग करते हैं तो डीबग पॉइंट सेट करें। मुझे आपकी समस्या महसूस हो रही है कि आप वास्तव में एक पूर्णांक वापस नहीं कर रहे हैं। आज़माएं:

line.Trim().Substring(0,1); 

यह किसी भी सफेद स्थान को हटा देगा।

+0

ट्रिम() में विफल रहता है तो ट्रीपार्स मुझे 0 पर सेट करता है, ट्रिम() स्ट्रिंग की समाप्ति और शुरुआत से ही व्हाइटस्पेस को हटा देगा, इसलिए यह नहीं है मूल स्ट्रिंग के आधार पर समस्या को हल करने की गारंटी है। –

+0

हां, लेकिन जैसा कि सबस्ट्रिंग (0,1) है, यह हमेशा शुरुआत और संभव अंत होगा। – StarSignLeo

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