जावा: एक चार्ट से पार्स इंट वैल्यू


223

मैं सिर्फ यह जानना चाहता हूं कि क्या किसी स्ट्रिंग में किसी वर्ण से संख्या को पार्स करने का एक बेहतर समाधान है (यह मानते हुए कि हम जानते हैं कि सूचकांक n पर वर्ण एक संख्या है)।

String element = "el5";
String s;
s = ""+element.charAt(2);
int x = Integer.parseInt(s);

//result: x = 5

(यह कहना बेकार है कि यह सिर्फ एक उदाहरण है)

जवाबों:


444

कोशिश करो Character.getNumericValue(char)

String element = "el5";
int x = Character.getNumericValue(element.charAt(2));
System.out.println("x=" + x);

पैदा करता है:

x=5

इसके बारे getNumericValue(char)में अच्छी बात यह है कि यह स्ट्रिंग्स के साथ भी काम करता है जैसे "el٥"और "el५"जहां ٥और क्रमशः पूर्वी अरबी और हिंदी / संस्कृत में 5 अंक हैं।


62

निम्नलिखित आज़माएँ:

str1="2345";
int x=str1.charAt(2)-'0';
//here x=4;

यदि u 'char' द्वारा घटाया जाता है, तो ASCII मान ज्ञात होने की आवश्यकता नहीं है।


1
उसके बारे में क्या कारण है? परिणाम ASCI में '0' और asci में चार के बीच घटाव है ???
इग्नासियो चियाज़ो

10
@msj क्योंकि अस्सी में मान बढ़ '0', '1', '2', ...रहे हैं। तो जैसे '0' ascii में 48 है, '1' 49 है, इत्यादि, यदि आप लेते '2' - '0'हैं तो आप वास्तव में बस प्राप्त करते हैं 50 - 48 = 2। इस सिद्धांत को बेहतर ढंग से समझने के लिए ASCII तालिका पर एक नज़र डालें। इसके अलावा, का 'x'मतलब है कि जावा में चरित्र के एससीआई मूल्य प्राप्त करें।
केविन वान राइकेगैम

1
@KevinVanRyckegem धन्यवाद! मैं क्यों लिए देख रहा था - '0'काम किया ... मैंने सोचा कि यह में कैसे जावा वर्ण व्याख्या या जो भी कुछ गहरी जादू था ... इस सही मायने में कुछ उलझी से अधिक मुझे का मामला था ...
scoots

हालांकि यह एक साफ-सुथरी चाल है, यह प्रयोग करने से कम पठनीय हैCharacter.getNumericValue
जनक मीणा

33

यह प्रदर्शन के दृष्टिकोण से शायद सबसे अच्छा है, लेकिन यह किसी न किसी तरह है:

String element = "el5";
String s;
int x = element.charAt(2)-'0';

यह काम करता है यदि आप मानते हैं कि आपका चरित्र एक अंक है, और केवल भाषाओं में हमेशा यूनिकोड का उपयोग कर रहा है, जैसे जावा ...


7
कोशिश करें कि स्ट्रिंग के साथ भारत में अंक 5 "el५"कहाँ हो । :)
बार्ट कीर्स

3
मुझे यकीन है कि आपने इस उदाहरण को खोजने के लिए कड़ी मेहनत की है ... :-) ठीक है, अगर आपको गैर-अरब अंकों को पार्स करना है, तो इस विधि से बचें। जैसा मैंने कहा, यह मोटा है। लेकिन यह अभी भी 99.999% मामलों में सबसे तेज़ तरीका है जहां यह काम करता है।
एलेक्सिस डफ्रेनॉय

@AlexisDufrenoy, वर्ण को घटाकर '0'पूर्णांक मान क्यों लौटाया जाना चाहिए ?
इस्तियाक अहमद

1
एएससीआईआई टेबल चार '9' = मान 57, चार '0' = इंट 48 से मानों को देखें, तो यह परिणाम '9' - '0' = 57 - 48 = 9
WHDeveloper

1
एक जादू की तरह काम करता है। lol @ counterexample और उन सभी भारतीयों को जिन्होंने आपके उत्तर की नकल की है। व्यंग्य।
omikes

16

बस '0' (शून्य) द्वारा एक बार में घटाकर एक वर्ण (अंक '0' से '9' तक) को इंट (0 से 9) में बदला जा सकता है, उदाहरण के लिए, '5' - '0' इंट 5 देता है।

String str = "123";

int a=str.charAt(1)-'0';

6
String a = "jklmn489pjro635ops";

int sum = 0;

String num = "";

boolean notFirst = false;

for (char c : a.toCharArray()) {

    if (Character.isDigit(c)) {
        sum = sum + Character.getNumericValue(c);
        System.out.print((notFirst? " + " : "") + c);
        notFirst = true;
    }
}

System.out.println(" = " + sum);

0

द्विआधारी का उपयोग ANDके साथ 0b1111:

String element = "el5";

char c = element.charAt(2);

System.out.println(c & 0b1111); // => '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5

// '0' & 0b1111 => 0b0011_0000 & 0b0000_1111 => 0
// '1' & 0b1111 => 0b0011_0001 & 0b0000_1111 => 1
// '2' & 0b1111 => 0b0011_0010 & 0b0000_1111 => 2
// '3' & 0b1111 => 0b0011_0011 & 0b0000_1111 => 3
// '4' & 0b1111 => 0b0011_0100 & 0b0000_1111 => 4
// '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5
// '6' & 0b1111 => 0b0011_0110 & 0b0000_1111 => 6
// '7' & 0b1111 => 0b0011_0111 & 0b0000_1111 => 7
// '8' & 0b1111 => 0b0011_1000 & 0b0000_1111 => 8
// '9' & 0b1111 => 0b0011_1001 & 0b0000_1111 => 9

0
String element = "el5";
int x = element.charAt(2) - 48;

चार से '0' = 48 की ascii मूल्य घटाना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.