2013-11-26 4 views
21

मुझे लगता है कि मैं कुछ सरल लापता किया जाना चाहिए, लेकिन मैं निम्नलिखित कोड पर एक NumberFormatException हो रही है:Integer.parseInt संख्या प्रारूप अपवाद?

System.out.println(Integer.parseInt("howareyou",35)) 

Ideone

यह आधार 35 से स्ट्रिंग yellow परिवर्तित कर सकते हैं, मैं ' मैं समझता हूं कि मुझे इस स्ट्रिंग पर NumberFormatException क्यों मिलेगा।

+0

प्रलेखन से: "मूलांक दूसरा तर्क द्वारा निर्दिष्ट में एक हस्ताक्षरित पूर्णांक के रूप में स्ट्रिंग तर्क पार्स करता है स्ट्रिंग में वर्णों सब होना चाहिए निर्दिष्ट मूलांक के अंकों (के रूप में है कि क्या Character.digit (द्वारा निर्धारित किया। char, int) एक nonnegative मान देता है), सिवाय इसके कि पहला अक्षर एक नकारात्मक मान या ASCII प्लस साइन '+' ('\ u002B') को इंगित करने के लिए एक ASCII शून्य चिह्न '-' ('\ u002D') हो सकता है सकारात्मक मान इंगित करें। परिणामी पूर्णांक मान वापस कर दिया गया है। " – HectorLector

+2

उत्पादित संख्या जावा इंटीजर के लिए बहुत बड़ी है, लंबे समय तक उपयोग करें ... –

उत्तर

29

क्योंकि परिणाम से अधिक Integer.MAX_VALUE

मिल जाएगा की कोशिश करो इस

System.out.println(Integer.parseInt("yellow", 35)); 
System.out.println(Long.parseLong("howareyou", 35)); 

और के लिए

Long.parseLong("abcdefghijklmno",25) 

आप की जरूरत BigInteger

इस कोशिश करो और आप देखेंगे क्यों

System.out.println(Long.MAX_VALUE); 
System.out.println(new BigInteger("abcdefghijklmno",25)); 
+0

यह सही लगता है। हालांकि, मैंने 'Long.parseLong (" abcdefghijklmno ", 25) की एक नई समस्या को मारा है। इस बात पर कोई विचार है कि मैं बड़ी संख्याओं को कैसे पार्स कर सकता हूं क्योंकि कोई पार्स बिगडिसीमल नहीं है? – Danny

+5

@ डैनी, इसके लिए आपको चाहिए, 'बिगइंटर बड़ा = नया बिगइंटर ("abcdefghijklmno", 25); ' – Masudul

5

Javadocs से:

  • पहला तर्क null है या लंबाई शून्य की एक श्रृंखला है:

    प्रकार NumberFormatException का एक अपवाद है, तो निम्न स्थितियों में से किसी भी होता है फेंक दिया है। गलत: "howareyou" नहीं null है और 0 से अधिक लंबाई

  • मूलांक या तो या Character.MIN_RADIX की तुलना में छोटे Character.MAX_RADIX से बड़ा है। गलत: 35 रेंज में है [2,36]
  • स्ट्रिंग का कोई भी वर्ण निर्दिष्ट रेडिक्स का अंक नहीं है, सिवाय इसके कि पहला वर्ण एक ऋण चिह्न '-' ('\ u002D') हो सकता है या धन चिह्न '+' ('\ u002B') प्रदान की है कि स्ट्रिंग की लंबाई से अधिक समय 1. गलत है: के सभी पात्रों "howareyou" मूलांक श्रेणी में हैं [0, 'y']
  • ==> स्ट्रिंग द्वारा दर्शाया गया मान int प्रकार का मान नहीं है। सही: अपवाद का कारण। int के लिए मान बहुत बड़ा है।

या तो Long या BigInteger

+1

यह वास्तव में प्रश्न का उत्तर नहीं देता है, आप केवल स्पष्ट किए बिना 4 विकल्प डंप करते हैं एक कारण है (और क्यों)। –

+0

शॉटगन दृष्टिकोण अभी भी गलत है। एक और केवल एक सही जवाब है। सिर्फ इसलिए कि आपने इसे 3 अन्य लोगों के साथ जोड़ा है जो पूरी तरह से गलत हैं, आपका जवाब सही नहीं है। – dm78

+2

@ डेविडमेज़ पहले मेरे लिए स्पष्ट रूप से झूठे थे - इसलिए पूरे जावा दस्तावेज़ों को उद्धृत करने में मदद मिली होगी यदि ओपी उन्मूलन की प्रक्रिया का उपयोग करता है - लेकिन अब स्पष्टता के लिए संपादित किया गया है –

5

इस्तेमाल किया जाना चाहिए यह हो सकता है कि संख्या>Integer.MAX_VALUE है? यदि मैं इसके बजाय Long के साथ अपना कोड आज़माता हूं, तो यह काम करता है।

2

जैसा कि आप देख सकते हैं, आप अपने Integer में स्थान से बाहर हो रहे हैं। Long के लिए इसे स्वैप करके, आपको वांछित परिणाम मिलते हैं। Here is the IDEOne Link to the working code

कोड

System.out.println(Integer.parseInt("YELLOW",35)); 
System.out.println(Long.parseLong("HOWAREYOU",35)); 
5

संख्या से बड़े Integer.MAX_VALUE

हो रही है इस प्रयास करें:

System.out.println(Integer.parseInt("yellow", 35)); 
System.out.println(Long.parseLong("howareyou", 35)); 

के रूप में रेने लिंक में देखा टिप्पणी आप इस एक का उपयोग कर की तरह कुछ के लिए देख रहे हैं BigInteger:

BigInteger big=new BigInteger("abcdefghijklmno", 25); 

कुछ इस तरह:

System.out.println(Long.MAX_VALUE); 
System.out.println(new BigInteger("abcdefghijklmno",25)); 
2

संख्या का उत्पादन बहुत बड़ी है एक जावा पूर्णांक के लिए, एक लंबे समय का उपयोग करें।

2

पार्सलॉन्ग के पिछले उत्तर सही होंगे, लेकिन कभी-कभी यह भी इतना बड़ा नहीं होता है कि दूसरा विकल्प बिगइंटर का उपयोग करना होगा।

Long.parseLong("howareyou", 35) 
new BigInteger("howareyou", 35) 
संबंधित मुद्दे