सवाल मैं जावा में एक स्ट्रिंग को एक int में कैसे परिवर्तित करूं?


मैं कैसे परिवर्तित कर सकता हूँ String एक को int जावा में?

मेरी स्ट्रिंग में केवल संख्याएं हैं, और मैं उस संख्या को वापस करना चाहता हूं जो इसे दर्शाती है।

उदाहरण के लिए, स्ट्रिंग दिया गया "1234" परिणाम संख्या होना चाहिए 1234


2520
2018-04-07 18:27


मूल




जवाब:


String myString = "1234";
int foo = Integer.parseInt(myString);

देखें जावा दस्तावेज़ीकरण अधिक जानकारी के लिए।


3558
2018-04-07 18:29



यह फेंक देगा NumberFormatException अगर इनपुट वैध संख्या नहीं है। - Francesco Menzani
संख्याफॉर्मेट अपवाद को पकड़ने के अलावा, उपयोगकर्ता को तारों की लंबाई के बारे में भी सावधान रहना चाहिए; यदि वे एक पूर्णांक को ओवरफ़्लो करने के लिए काफी लंबे समय तक हैं, तो वे इसके बजाय लांग :: पार्सलॉन्ग का उपयोग करने पर विचार करना चाहेंगे। - Allison
@ एलिसन विशेष रूप से यदि पोस्टग्रेएसक्यूएल ऑटो बिगिनेटेड प्राथमिक कुंजी फ़ील्ड में बिगिनट फ़ील्ड का उपयोग उदाहरण के लिए करते हैं। लंबे समय तक उपयोग करने के लिए अधिक सुरक्षित है - Letholdrus
आप जांच सकते हैं कि स्ट्रिंग पहले नंबर है या नहीं: stackoverflow.com/questions/1102891/... - JPRLCol
यह विधि तब भी अपवाद फेंकता है जब स्ट्रिंग आधार 10 में एक पारदर्शी पूर्णांक नहीं है। अन्य अड्डों में काम करने के लिए ओवरलोडेड विधि का उपयोग करें। जैसे Integer.parseInt ("1001", 8); आधार 8 के लिए। स्रोत। - lokesh


उदाहरण के लिए, यहां दो तरीके हैं:

Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);

इन विधियों के बीच थोड़ा अंतर है:

  • valueOf एक नया या कैश उदाहरण देता है java.lang.Integer
  • parseInt आदिम लौटाता है int

सभी मामलों के लिए भी यही है: Short.valueOf/parseShort, Long.valueOf/parseLong, आदि।


588
2018-04-07 18:36



दो तरीकों के बीच अंतर के लिए, देखें यह प्रश्न - hertzsprung
valueOf विधि बस है return valueOf(parseInt(string)); - Paul Verest


खैर, विचार करने के लिए एक बहुत ही महत्वपूर्ण बात यह है कि इंटीजर पार्सर ने नंबरफॉर्मेट अपवाद को फेंक दिया है जैसा कि बताया गया है जावाडोक

int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
      //Will Throw exception!
      //do something! anything to handle the exception.
}

try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
      //No problem this time, but still it is good practice to care about exceptions.
      //Never trust user input :)
      //Do something! Anything to handle the exception.
}

विभाजित तर्कों से पूर्णांक मान प्राप्त करने या गतिशील रूप से कुछ विश्लेषण करने की कोशिश करते समय इस अपवाद को संभालना महत्वपूर्ण है।


215
2018-04-30 06:54



मैं "26263 हेल्लो" का विश्लेषण कैसे कर सकता हूं? मैं उस मामले में 26263 निकालना चाहता हूं - user463035818
@ user463035818 - देखें docs.oracle.com/javase/8/docs/api/java/util/regex/... - का एक नियमित अभिव्यक्ति पैटर्न "([0-9]+)" एक या एक से अधिक अंकों के पहले अनुक्रम को "नौ" के माध्यम से "कैप्चर" करेगा। की ओर देखने के लिए Matcher उस पैकेज में कक्षा। - Mark Stewart


इसे मैन्युअल रूप से करें:

public static int strToInt( String str ){
    int i = 0;
    int num = 0;
    boolean isNeg = false;

    //Check for negative sign; if it's there, set the isNeg flag
    if (str.charAt(0) == '-') {
        isNeg = true;
        i = 1;
    }

    //Process each character of the string;
    while( i < str.length()) {
        num *= 10;
        num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
    }

    if (isNeg)
        num = -num;
    return num;
}

72
2017-09-11 02:08



क्या होगा यदि इनपुट 2 ^ 32 से बड़ा है? क्या होगा अगर इनपुट में गैर-संख्यात्मक वर्ण हों? - yohm
उन चीजों में से एक जो प्रोग्रामर को कार्यबल में शामिल होने पर सीखना चाहिए, अगर पहले नहीं, तो कभी भी पहियों का पुन: आविष्कार नहीं करना चाहिए। यह एक मजेदार अभ्यास हो सकता है, लेकिन अगर आप इस तरह की चीज को व्यावसायिक सेटिंग में करते हैं तो कोड कोड समीक्षा पास करने की अपेक्षा न करें। - Dawood ibn Kareem
@yohm वे विशेष मामले हैं; आप लंबे और कुछ regex के साथ संभाल सकते हैं; हालांकि, तब तक आप parseInt का उपयोग कर सकते हैं। - Billz
-1 क्षमा करें, लेकिन यह एक बहुत ही खराब एल्गोरिदम है, जिसमें कई सीमाएं हैं, कोई त्रुटि प्रबंधन नहीं है, और कुछ अजीब विसंगतियों (जैसे "" एक अपवाद देता है, "-" 0 का उत्पादन करेगा, और "+" उत्पादन -5)। कोई भी इसे क्यों चुनता है Integer.parseInt(s)? - मुझे इस बारे में एक साक्षात्कार प्रश्न होने के बारे में बिंदु दिखाई देता है, लेकिन ए) यह नहीं दर्शाता है कि आप इसे इस तरह से करेंगे (जो प्रश्नकर्ता ने पूछा है), और बी) यह उत्तर वैसे भी एक बहुत बुरा उदाहरण है। - SusanW
मुझे लगता है कि यह जवाब जिज्ञासु साथी के लिए है ... - Timur Milovanov


वर्तमान में मैं कॉलेज के लिए एक असाइनमेंट कर रहा हूं, जहां मैं ऊपर दिए गए कुछ अभिव्यक्तियों का उपयोग नहीं कर सकता, और ASCII तालिका को देखकर, मैं इसे करने में कामयाब रहा। यह एक बहुत ही जटिल कोड है, लेकिन यह उन लोगों की मदद कर सकता है जो मेरे जैसे प्रतिबंधित हैं।

करने के लिए पहली बात इनपुट प्राप्त करना है, इस मामले में, अंकों की एक स्ट्रिंग; मैं इसे बुलाऊंगा String number, और इस मामले में, मैं संख्या 12 का उपयोग करके इसे उदाहरण दूंगा String number = "12";

एक और सीमा यह तथ्य थी कि मैं दोहराव वाले चक्रों का उपयोग नहीं कर सका, इसलिए ए for चक्र (जो सही होगा) या तो इस्तेमाल नहीं किया जा सकता है। यह हमें थोड़ा सा सीमित करता है, लेकिन फिर, यह लक्ष्य है। चूंकि मुझे केवल दो अंकों की आवश्यकता है (अंतिम दो अंक लेना), एक साधारण charAtउसे हल कर लिया:

 // Obtaining the integer values of the char 1 and 2 in ASCII
 int semilastdigitASCII = number.charAt(number.length()-2);
 int lastdigitASCII = number.charAt(number.length()-1);

कोड होने के बाद, हमें बस टेबल पर देखने की आवश्यकता है, और आवश्यक समायोजन करना है:

 double semilastdigit = semilastdigitASCII - 48;  //A quick look, and -48 is the key
 double lastdigit = lastdigitASCII - 48;

अब, क्यों डबल? खैर, वास्तव में "अजीब" कदम की वजह से। वर्तमान में हमारे पास दो युगल, 1 और 2 हैं, लेकिन हमें इसे 12 में बदलना होगा, कोई गणितीय ऑपरेशन नहीं है जिसे हम कर सकते हैं।

हम बाद में (lastdigit) फैशन में 10 से विभाजित कर रहे हैं 2/10 = 0.2 (इसलिए क्यों डबल) इस तरह:

 lastdigit = lastdigit/10;

यह केवल संख्याओं के साथ खेल रहा है। हम अंतिम अंक को दशमलव में बदल रहे थे। लेकिन अब, देखें कि क्या होता है:

 double jointdigits = semilastdigit + lastdigit; // 1.0 + 0.2 = 1.2

गणित में भी पहुंचने के बिना, हम इकाइयों को एक संख्या के अंकों को अलग कर रहे हैं। आप देखते हैं, क्योंकि हम केवल 0-9 पर विचार करते हैं, 10 में से एक से विभाजित करना एक "बॉक्स" बनाना है जहां आप इसे स्टोर करते हैं (जब आपके पहले ग्रेड शिक्षक ने आपको बताया कि एक इकाई और सौ क्या थे)। इसलिए:

 int finalnumber = (int) (jointdigits*10); // Be sure to use parentheses "()"

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

  • कोई दोहराव चक्र नहीं
  • कोई "जादू" अभिव्यक्ति जैसे parseInt

38
2018-03-20 23:51



एक पूर्णांक पार्सिंग के लिए टाइप डबल का उपयोग करना न केवल एक बुरा विचार प्रदर्शन-वार है। 0.2 जैसे मान फ़्लोटिंग-पॉइंट प्रस्तुति में आवधिक संख्या हैं और सटीक रूप से प्रदर्शित नहीं किए जा सकते हैं। बिंदु देखने के लिए System.out.println (0.1 + 0.2) आज़माएं - परिणाम 0.3 नहीं होगा! पुस्तकालय कोड whereever के साथ बेहतर छड़ी, आप इस मामले में Integer.parseInt () कर सकते हैं। - ChrisB
यह स्पष्ट नहीं है कि यह उत्तर किस प्रकार की समस्या को हल करने का प्रयास करता है, सबसे पहले, किसी को कभी भी उस प्रतिबंध का वर्णन क्यों करना चाहिए, दूसरा, आपको एक ASCII तालिका क्यों देखना है जैसा आप आसानी से उपयोग कर सकते हैं '0' के बजाय चरित्र के लिए 48 और इसके वास्तविक संख्यात्मक मूल्य से परेशान नहीं होना चाहिए। तीसरा, पूरे चक्कर के साथ doubleमूल्यों को कोई समझ नहीं आता है क्योंकि आप दस से विभाजित होते हैं, बस दस के साथ गुणा करने के लिए। नतीजा बस है semilastdigit * 10 + lastdigit जैसा कि प्राथमिक विद्यालय में सीखा गया था, जब दशमलव प्रणाली शुरू की गई थी ... - Holger
@ होल्गर I को व्यक्तिगत रूप से प्रोग्रामिंग शुरू करने पर प्रतिबंध दिया गया था, और जब मुझे एक परीक्षण में इसी तरह की बातचीत (पेन / पेपर) लिखना पड़ा था। यह असामान्य है, लेकिन यह एक तरीका है जिसे आसानी से समझा जा सकता है और मील तक सबसे कुशल नहीं होने पर यह एक ऐसी विधि है जो छोटी परियोजनाओं के लिए पर्याप्त रूप से पर्याप्त काम करती है। SO.SE हर किसी की मदद करने के लिए है, न केवल कुछ। मैंने एक वैकल्पिक तरीका प्रदान किया है, जो छद्म-एल्गोरिदम बनाने और इसे प्रीडेड जावा अभिव्यक्तियों का उपयोग करने के बजाय इसे एल्गोरिदम में बदलने के तरीके से शुरू कर रहे हैं। हालांकि मुझे भूल गया कि '0' अच्छा है - Oak


एक वैकल्पिक समाधान का उपयोग करना है अपाचे कॉमन्स ' NumberUtils:

int num = NumberUtils.toInt("1234");

अपाचे उपयोगिता अच्छी है क्योंकि यदि स्ट्रिंग एक अमान्य संख्या प्रारूप है तो 0 हमेशा वापस आ जाता है। इसलिए आपको पकड़ने की कोशिश ब्लॉक को बचाने के लिए।

अपाचे संख्या API संस्करण 3.4 का उपयोग करता है


33
2017-08-27 12:07



अमान्य संख्या का विश्लेषण होने पर आप शायद ही कभी 0 का उपयोग करना चाहते हैं। - wnoise
यदि कोई ऑब्जेक्ट पर एक int फ़ील्ड सेट नहीं है तो ज़ीरो डिफ़ॉल्ट रूप से जावा का उपयोग करता है। तो उस संबंध में यह समझ में आता है। - Ryboflavin
@Ryboflavin नहीं, यह नहीं करता है। उनमें से एक एक अच्छी तरह से परिभाषित भाषा अर्थपूर्ण है, और दूसरा एक अपवाद है - etherous


Integer.decode

आप भी उपयोग कर सकते हैं public static Integer decode(String nm) throws NumberFormatException

यह आधार 8 और 16 के लिए भी काम करता है:

// base 10
Integer.parseInt("12");     // 12 - int
Integer.valueOf("12");      // 12 - Integer
Integer.decode("12");       // 12 - Integer
// base 8
// 10 (0,1,...,7,10,11,12)
Integer.parseInt("12", 8);  // 10 - int
Integer.valueOf("12", 8);   // 10 - Integer
Integer.decode("012");      // 10 - Integer
// base 16
// 18 (0,1,...,F,10,11,12)
Integer.parseInt("12",16);  // 18 - int
Integer.valueOf("12",16);   // 18 - Integer
Integer.decode("#12");      // 18 - Integer
Integer.decode("0x12");     // 18 - Integer
Integer.decode("0X12");     // 18 - Integer
// base 2
Integer.parseInt("11",2);   // 3 - int
Integer.valueOf("11",2);    // 3 - Integer

अगर आप प्राप्त करना चाहते हैं int के बजाय Integer आप उपयोग कर सकते हैं:

  1. बॉक्स से निकालना:

    int val = Integer.decode("12"); 
    
  2. intValue():

    Integer.decode("12").intValue();
    

27
2018-03-07 00:42



आखिरकार! कोई भी जो वास्तव में रूपांतरणों के परिणाम / आउटपुट पोस्ट करने के लिए परेशान है! क्या आप कुछ संकेतों के साथ भी जोड़ सकते हैं? - not2qubit