2010-01-27 15 views
5

मुझे शायद कुछ याद आ रहा है, लेकिन क्यों दो संख्यात्मक मान -1 के बराबर हैं?कैरेक्टर.getNumericValue() मुद्दा

System.out.println(Character.getNumericValue(Character.MAX_VALUE)); 
    System.out.println(Character.getNumericValue(Character.MIN_VALUE)); 

रिटर्न:

-1 
-1 

उत्तर

9

getNumericValue() उनके संख्यात्मक मान को अक्षर है कि वास्तव में संख्याओं का प्रतिनिधित्व ("सामान्य" 0-9 अंक की तरह, लेकिन यह भी अन्य लिपियों में अंकों के) में परिवर्तित कर देंगे। Character.MAX_VALUE और Character.MIN_VALUE द्वारा दर्शाए गए वर्ण इस तरह के संख्यात्मक मूल्य नहीं हैं; वे अंक नहीं हैं। और API doc के अनुसार: चरित्र एक संख्यात्मक मान नहीं है

, तो -1 दिया जाता है।

3

क्योंकि Character.MAX_VALUE और Character.MIN_VALUE संख्यात्मक नहीं हैं। Character.getNumericValue(char) रिटर्न -1 जब पैरामीटर एक ऐसा चरित्र नहीं है जो किसी संख्या को मानचित्र करता है।

संख्या वर्ण (0-9), अक्षर वर्ण (ए-जेड), और अन्य यूनिकोड संख्या वर्ण मानों से जुड़े होते हैं। मैं मैप किए गए सभी अन्य पात्रों को नहीं जानता। लेकिन कई पात्र सिर्फ -1 लौट आएंगे।

+0

आपका अंतिम वाक्य गलत है; यूनिकोड मानक द्वारा परिभाषित संख्यात्मक मानों से जुड़े कई और वर्ण हैं। –

+0

आह, उसे नहीं पता था। मुझे लगता है कि वे विधि दस्तावेज में केवल 1 उदाहरण के रूप में रोमन अंक देते हैं। –

3

.. सिर्फ इसलिए कि \u0000 और '\ uffff` एक अंक का प्रतिनिधित्व नहीं करते हैं और संख्यात्मक मूल्य नहीं है।

मुझे लगता है कि आप चार के 16 बिट मूल्य के लिए देख रहे थे, लेकिन इस के लिए हम बस डाली कर सकते हैं:

int value = (int) Character.MAX_VALUE; 
4

getNumericValue() केवल अक्षर हैं जो इस तरह के अंक '0''9' के माध्यम से के रूप में संख्या का प्रतिनिधित्व करते हैं, पर लागू होता है। एक सुविधा के रूप में, यह एएससीआईआई अक्षरों का भी व्यवहार करता है जैसे कि वे बेस -36 संख्या प्रणाली में अंक थे (इसलिए 'A' 10 और 'Z' 35 है)।

यह एक बहुत से लोगों को मूर्ख बनाता है। आप एक चरित्र की यूनिकोड मूल्य जानना चाहते हैं, तुम सब करने की ज़रूरत int करने के लिए इसे डाला जाता है:

System.out.println((int)Character.MAX_VALUE); 
System.out.println((int)Character.MIN_VALUE); 
संबंधित मुद्दे