Kaip konvertuoti String į int į Java?

Kaip konvertuoti String į int į Java?

Mano eilutėje yra tik numeriai, ir noriu grąžinti jam atstovaujamą numerį.

Pavyzdžiui, atsižvelgiant į eilutę "1234" rezultatas turėtų būti skaičius 1234 .

2720
07 апр. nustatė Nežinomas vartotojas 07 Bal 2011-04-07 21:27 '11, 21:27, 2011-04-07 21:27
@ 44 atsakymai
  • 1
  • 2
 String myString = "1234"; int foo = Integer.parseInt(myString); 

Jei pažvelgsite į „ Java“ dokumentaciją , pastebėsite „triuką“, „ NumberFormatException , kad ši funkcija gali generuoti „ NumberFormatException , kuri, žinoma, turi būti tvarkoma:

 int foo; try { foo = Integer.parseInt(myString); } catch (NumberFormatException e) { foo = 0; } 

(Pagal numatytuosius nustatymus šis negaliojantis numeris yra 0 , bet, jei norite, galite padaryti kitą.)

Be to, galite naudoti „ Ints metodą iš „Guava“ bibliotekos, kuri kartu su „Java 8“ Optional suteikia galingą ir glaustą būdą paversti eilutę į int:

 import com.google.common.primitives.Ints; int foo = Optional.ofNullable(myString) .map(Ints::tryParse) .orElse(0) 
3767
07 апр. Rob Hruska atsakymas 07 Bal 2011-04-07 21:29 '11, 21:29, 2011-04-07 21:29

Pavyzdžiui, tai yra du būdai:

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

Šių metodų skirtumas yra nedidelis:

border=0
  • valueOf grąžina naują arba talpyklą saugomą java.> instanciją
  • parseInt grąžina int primityvų.

Tas pats visiems atvejams: Short.valueOf / parseShort , Long.valueOf / parseLong ir tt

628
07 апр. atsakymas smas 07 Bal 2011-04-07 21:36 '11 prie 21:36 2011-04-07 21:36

Labai svarbus dalykas, kurį reikia apsvarstyti, yra tai, kad „Integer“ analizatorius išmeta „NumberFormatException“, kaip nurodyta javadoc.

 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. } 

Svarbu tvarkyti šią išimtį, bandant gauti atskirų argumentų sveikasis skaičius arba dinamiškai suprasti.

230
30 апр. Ali Akdurak atsakymas, pateiktas balandžio 30 d 2013-04-30 09:54 '13, 9:54, 2013-04-30 09:54

Atlikite tai rankiniu būdu:

 public static int strToInt( String str ){ int i = 0; int num = 0; boolean isNeg = false; //Check for negative sign; if it 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; } 
83
11 сент. Billz atsakymas, pateiktas rugsėjo 11 d 2013-09-11 05:08 '13, 5:08 am 2013-09-11 05:08

Šiuo metu atlieku koledžo užduotį, kur negaliu naudoti tam tikrų išraiškų, tokių kaip aukščiau, ir, žiūrėdamas į ASCII lentelę, man pavyko tai padaryti. Tai yra daug sudėtingesnis kodas, tačiau jis gali padėti kitiems, kurie buvo riboti, kaip ir aš.

Pirmas dalykas - gauti įvestį, šiuo atveju skaičių eilutę; Aš jį String number , ir šiuo atveju jį iliustruosiu numeriu 12, todėl String number = "12";

Kitas apribojimas buvo tas, kad aš negalėjau naudoti pasikartojančių kilpų, todėl negalite naudoti „ for loop“ (kuri būtų tobula). Tai šiek tiek riboja, bet vėlgi, šį tikslą. Kadangi man reikia tik dviejų skaitmenų (atsižvelgiant į paskutinius du skaitmenis), paprastas sprendimas:

  // 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); 

Turėdami kodus, mes turime tik pažvelgti į stalą ir atlikti reikiamus pakeitimus:

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

Dabar kodėl dukart? Na, dėl tikrai „keisto“ žingsnio. Šiuo metu mes turime du dvynius: 1 ir 2, bet mes turime jį paversti 12, nėra matematinės operacijos, kurią galime padaryti.

Paskutinį (paskutinį kartą) skirstome 10 modulių 2/10 = 0.2 (todėl dvigubai) taip:

  lastdigit = lastdigit/10; 

Tai tik žaidimas su skaičiais. Paskutinį skaitmenį pakeitėme dešimtainiu. Bet pažiūrėkite, kas vyksta:

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

Nesikreipdami į matematiką mes tiesiog išskiriame skaičių vienetus. Matote, nes mes tik žiūrime į 0-9, dalijantis į keletą iš 10 yra panašus į >

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

Ir jūs einate ten. Numerių eilutę (šiuo atveju du numerius) pavertėte sveikaisiais skaičiais, susidedančiais iš dviejų skaičių, atsižvelgiant į šiuos apribojimus:

  • Nėra kartojamų ciklų
  • Nėra magiškų išraiškų, pvz., ParseInt
42
21 марта '14 в 2:51 2014-03-21 02:51 atsakymas pateikiamas Ąžuolas Kovo 21 '14 14:51 2014-03-21 02:51

Alternatyvus sprendimas yra naudoti „ Apache Commons“ NumberUtils:

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

„Apache“ naudingumas yra geras, nes jei eilutė yra netinkamas skaitmeninis formatas, tuomet reikšmė 0 visada grąžinama, todėl išsaugosite sugavimo bandymo bloką.

Apache NumberUtils API versija 3.4

40
27 авг. atsakymas pateikiamas Ryboflavin 27 rug . 2015-08-27 15:07 '15 , 15:07 2015-08-27 15:07

Integer.decode

Taip pat galite naudoti public static Integer decode(String nm) throws NumberFormatException .

Jis taip pat veikia 8 ir 16 bazėms:

 // 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 

Jei norite gauti int o ne Integer , galite naudoti:

  • Išpakavimas:

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

     Integer.decode("12").intValue(); 
32
07 марта '16 в 3:42 2016-03-07 03:42 atsakymas pateikiamas RUMUNIJA_inžinierius kovo 7 d. 16 d. 3:42 2016-03-07 03:42

Kai tik yra mažiausia tikimybė, kad tam tikroje eilutėje nėra sveiko skaičiaus, turėsite dirbti su šiuo konkrečiu atveju. Deja, standartiniai „Java“ metodai „ Integer::parseInt ir „ Integer::valueOf mesti „ NumberFormatException kad signalizuotų šį ypatingą atvejį. Taigi, turėtumėte naudoti išimtis, kad valdytumėte srautą, kuris paprastai laikomas blogu kodavimo stiliumi.

Mano nuomone, šis specialus atvejis turi būti sprendžiamas grąžinant Optional<Integer> . Kadangi „Java“ nesiūlo tokio metodo, naudoju tokį apvalkalą:

 private Optional<Integer> tryParseInteger(String string) { try { return Optional.of(Integer.valueOf(string)); } catch (NumberFormatException e) { return Optional.empty(); } } 

Naudoti:

 // prints 1234 System.out.println(tryParseInteger("1234").orElse(-1)); // prints -1 System.out.println(tryParseInteger("foobar").orElse(-1)); 

Nors jis vis dar naudoja išimtis, kad kontroliuotų srautą viduje, naudojimo kodas tampa labai švarus.

25
04 апр. Stefan Dollase atsakymas 04 Bal 2016-04-04 06:13 '16 at 6:13 2016-04-04 06:13

Keičiant eilutę į „int“, sunkiau nei konvertuoti skaičių. Galite galvoti apie šias problemas:

  • Straipsnyje yra tik numeriai 0-9 ?
  • Kas atsitinka su - / + prieš arba po linijos? Ar tai įmanoma (nurodant sąskaitos numerius)?
  • Kas atsitinka su MAX _- / MIN_INFINITY? Kas atsitiks, jei linija 99999999999999999999? Ar mašina gali valdyti šią eilutę kaip int?
23
20 окт. Atsakymas, kurį pateikė Dennis Ahaus Oct 20 2013-10-20 16:18 '13, 16:18, 2013-10-20 16:18

Norint konvertuoti eilutės reikšmę į sveikojo skaičiaus reikšmę, mes galime naudoti „ Integer shell“ klasės parseInt(String str) metodą.

Pavyzdžiui:

 String strValue = "12345"; Integer intValue = Integer.parseInt(strVal); 

Integer klasė taip pat suteikia „ valueOf(String str) metodą:

 String strValue = "12345"; Integer intValue = Integer.valueOf(strValue); 

Taip pat galime naudoti „ toInt(String strValue) klasę, skirtą „NumberItils“ konvertuoti:

 String strValue = "12345"; Integer intValue = NumberUtils.toInt(strValue); 
22
20 окт. Giridhar Kumar atsakymas spalio 20 d. 2015-10-20 12:51 '15 - 12:51 2015-10-20 12:51

To metodai:

  1. Integer.parseInt(s) 2. Integer.parseInt(s, radix) 3. Integer.parseInt(s, beginIndex, endIndex, radix) 4. Integer.parseUnsignedInt(s) 5. Integer.parseUnsignedInt(s, radix) 6. Integer.parseUnsignedInt(s, beginIndex, endIndex, radix) 7. Integer.valueOf(s) 8. Integer.valueOf(s, radix) 9. Integer.decode(s) 10. NumberUtils.toInt(s) 11. NumberUtils.toInt(s, defaultValue) 

„Integer.valueOf“ grąžina „Integer“ objektą, visi kiti metodai naudoja int primityvų.

Paskutiniai 2 metodai iš commons-> ir puikus straipsnis apie konversiją čia .

21
03 окт. atsakymą pateikė Dmytro Shvechikov 03 spalis 2017-10-03 22:16 '17, 10:16 pm 2017-10-03 22:16

Turiu sprendimą, bet nežinau, kaip veiksminga. Bet tai veikia gerai, ir manau, kad galėtumėte ją pagerinti. Kita vertus, aš atlikdavau keletą testų su JUnit, kurie žengia žingsnį teisingai. Pridėjau funkciją ir bandymus:

 static public Integer str2Int(String str) { Integer result = null; if (null == str || 0 == str.length()) { return null; } try { result = Integer.parseInt(str); } catch (NumberFormatException e) { String negativeMode = ""; if(str.indexOf('-') != -1) negativeMode = "-"; str = str.replaceAll("-", "" ); if (str.indexOf('.') != -1) { str = str.substring(0, str.indexOf('.')); if (str.length() == 0) { return (Integer)0; } } String strNum = str.replaceAll("[^\\d]", "" ); if (0 == strNum.length()) { return null; } result = Integer.parseInt(negativeMode + strNum); } return result; } 

Testavimas su JUnit:

 @Test public void testStr2Int() { assertEquals("is numeric", (Integer)(-5), Helper.str2Int("-5")); assertEquals("is numeric", (Integer)50, Helper.str2Int("50.00")); assertEquals("is numeric", (Integer)20, Helper.str2Int("$ 20.90")); assertEquals("is numeric", (Integer)5, Helper.str2Int(" 5.321")); assertEquals("is numeric", (Integer)1000, Helper.str2Int("1,000.50")); assertEquals("is numeric", (Integer)0, Helper.str2Int("0.50")); assertEquals("is numeric", (Integer)0, Helper.str2Int(".50")); assertEquals("is numeric", (Integer)0, Helper.str2Int("-.10")); assertEquals("is numeric", (Integer)Integer.MAX_VALUE, Helper.str2Int(""+Integer.MAX_VALUE)); assertEquals("is numeric", (Integer)Integer.MIN_VALUE, Helper.str2Int(""+Integer.MIN_VALUE)); assertEquals("Not is numeric", null, Helper.str2Int("czv.,xcvsa"));  for(Integer num = 0; num < 1000; num++) { for(int spaces = 1; spaces < 6; spaces++) { String numStr = String.format("%0"+spaces+"d", num); Integer numNeg = num * -1; assertEquals(numStr + ": is numeric", num, Helper.str2Int(numStr)); assertEquals(numNeg + ": is numeric", numNeg, Helper.str2Int("- " + numStr)); } } } 
19
23 мая '14 в 18:38 2014-05-23 18:38 atsakymą pateikė „ fitorec “ gegužės 23 d. 14, 18:38 2014-05-23 18:38

Naudoti Integer.parseInt(yourString)

Prisiminkite šiuos dalykus:

Integer.parseInt("1"); // Gerai

Integer.parseInt("-1"); // Gerai

Integer.parseInt("+1"); // Gerai

Integer.parseInt(" 1"); // Išimtis (tuščia erdvė)

Integer.parseInt("2147483648"); // Išimtis (sveikasis skaičius apribotas maksimalia verte 2 147 483 647)

Integer.parseInt("1.1"); // Išimtis (. Arba arba visa tai neleidžiama)

Integer.parseInt(""); // išimtis (ne 0 ar kažkas)

Yra tik viena išimčių rūšis: NumberFormatException

19
06 окт. Atsakyti Lukas Bauer 06 spalis 2017-10-06 22:00 „17, 10 val. 2017-10-06 22:00

Tiesiog įdomus: galite naudoti „Java 8“, Optional norite konvertuoti String į bendrą skaičių:

 String str = "123"; Integer value = Optional.of(str).map(Integer::valueOf).get(); // Will return the integer value of the specified string, or it // will throw an NPE when str is null. value = Optional.ofNullable(str).map(Integer::valueOf).orElse(-1); // Will do the same as the code above, except it will return -1 // when srt is null, instead of throwing an NPE. 

Čia mes tiesiog sujungiame „ Integer.valueOf ir „ Integer.valueOf . Gali būti situacijų, kai tai yra naudinga - pavyzdžiui, jei norite išvengti nulinės patikros. Iki „Java Java 8“ kodas atrodytų taip:

 Integer value = (str == null) ? -1 : Integer.parseInt(str); 
17
09 нояб. Atsakymą pateikė Anton Balaniuc, lapkričio 9 d. 2016-11-09 14:34 '16 at 14:34 pm 2016-11-09 14:34

Guava turi tryParse (String) , kuri grąžina null jei eilutė negali būti analizuojama, pavyzdžiui:

 Integer fooInt = Ints.tryParse(fooString); if (fooInt != null) { ... } 
16
06 авг. atsakymas pateikiamas Vitalii Fedorenko 06 rugpjūčio mėn. 2016-08-06 20:56 '16 at 20:56 2016-08-06 20:56

Taip pat galite pradėti pašalinti visus ne skaitmeninius simbolius ir tada analizuoti int:

 string mystr = mystr.replaceAll( "[^\\d]", "" ); int number= Integer.parseInt(mystr); 

Tačiau reikia įspėti, kad tai veikia tik ne neigiamus skaičius.

14
20 окт. Thijser spalio 20 d. Atsakymas 2013-10-20 16:11 '13, 16:11 2013-10-20 16:11

Be šių pirmiau pateiktų atsakymų, norėčiau pridėti keletą funkcijų:

  public static int parseIntOrDefault(String value, int defaultValue) { int result = defaultValue; try { result = Integer.parseInt(value); } catch (Exception e) { } return result; } public static int parseIntOrDefault(String value, int beginIndex, int defaultValue) { int result = defaultValue; try { String stringValue = value.substring(beginIndex); result = Integer.parseInt(stringValue); } catch (Exception e) { } return result; } public static int parseIntOrDefault(String value, int beginIndex, int endIndex, int defaultValue) { int result = defaultValue; try { String stringValue = value.substring(beginIndex, endIndex); result = Integer.parseInt(stringValue); } catch (Exception e) { } return result; } 

Ir čia yra rezultatai, kai juos paleisite:

  public static void main(String[] args) { System.out.println(parseIntOrDefault("123", 0)); // 123 System.out.println(parseIntOrDefault("aaa", 0)); // 0 System.out.println(parseIntOrDefault("aaa456", 3, 0)); // 456 System.out.println(parseIntOrDefault("aaa789bbb", 3, 6, 0)); // 789 } 
12
01 авг. atsakymas duotas nxhoaf 01 rug . 2016-08-01 17:44 '16 at 17:44 2016-08-01 17:44

Kaip minėta, „Apache Commons NumberUtils gali tai padaryti. Ką grąžinti 0 jei jis negali konvertuoti eilutės į int.

Taip pat galite nustatyti savo numatytąją vertę.

 NumberUtils.toInt(String str, int defaultValue) 

Pavyzdys:

 NumberUtils.toInt("3244", 1) = 3244 NumberUtils.toInt("", 1) = 1 NumberUtils.toInt(null, 5) = 5 NumberUtils.toInt("Hi", 6) = 6 NumberUtils.toInt(" 32 ", 1) = 1 //space in numbers are not allowed NumberUtils.toInt(StringUtils.trimToEmpty( " 32 ",1)) = 32; 
9
26 июля '16 в 8:26 2016-07-26 08:26 Atsakymą pateikė Alireza Fattahi liepos 26 d. 16, 8:26 2016-07-26 08:26

Programavimo varžybose, kur esate tikri, kad numeris visada bus tikrasis sveikasis skaičius, galite parašyti savo metodą analizuoti. Tai bus praleisti visą kodą, susijusį su čekiu (nes jums to nereikia) ir bus šiek tiek efektyvesnis.

  • Tikras natūralus skaičius:

     private static int parseInt(String str) { int i, n = 0; for (i = 0; i < str.length(); i++) { n *= 10; n += str.charAt(i) - 48; } return n; } 
  • Teigiami ir neigiami sveikieji skaičiai:

     private static int parseInt(String str) { int i=0, n=0, sign=1; if(str.charAt(0) == '-') { i=1; sign=-1; } for(; i<str.length(); i++) { n*=10; n+=str.charAt(i)-48; } return sign*n; } 

  • Jei str = str.trim() vietos prieš ar po šių numerių, tada prieš tolesnį apdorojimą būtinai atlikite str = str.trim() .

9
24 апр. Raman Sahasi atsakymas balandžio 24 d 2017-04-24 08:36 '17 at 8:36 2017-04-24 08:36

Galite naudoti new Scanner("1244").nextInt() . Arba paklauskite, ar yra net int: new Scanner("1244").hasNextInt()

9
28 февр. Christian Ullenboom atsakė 28 vasario mėn. 2017-02-28 23:36 '17, 11:36 pm 2017-02-28 23:36

Taip pat galite naudoti šį kodą su tam tikromis atsargumo priemonėmis.

  • 1 parinktis: išskirtinai tvarkykite išimtį, pavyzdžiui, parodykite pranešimo dialogą ir sustabdykite dabartinės darbo eigos vykdymą. Pavyzdžiui:

     try { String stringValue = "1234"; // From String to Integer int integerValue = Integer.valueOf(stringValue); // Or int integerValue = Integer.ParseInt(stringValue); // Now from integer to back into string stringValue = String.valueOf(integerValue); } catch (NumberFormatException ex) { //JOptionPane.showMessageDialog(frame, "Invalid input string!"); System.out.println("Invalid input string!"); return; } 
  • # 2 parinktis: atstatykite paveiktą kintamąjį, jei vykdymo sriegis gali išlikti išimties atveju. Pvz., Kai kurie sugavimo bloko pakeitimai

     catch (NumberFormatException ex) { integerValue = 0; } 

Naudojant eilutės konstantą palyginimui ar bet kokiam skaičiavimui, visada gera idėja, nes konstanta niekada negrąžina nulinės vertės.

9
31 дек. atsakymą pateikė manikantas gautam 31 d. 2015-12-31 08:28 '16 at 8:28 2015-12-31 08:28

Jei norite naudoti įprastą eilutę, galite naudoti:

 int number = Integer.parseInt("1234"); 

Styginių statytojui ir eilutės buferiui galite naudoti:

 Integer.parseInt(myBuilderOrBuffer.toString()); 
7
18 авг. atsakymas duotas Aditya 18 rug. 2016-08-18 10:07 '16 at 10:07 2016-08-18 10:07

Tiesiog galite pabandyti:

  • Naudokite Integer.parseInt(your_string); konvertuoti String į int
  • Naudokite „ Double.parseDouble(your_string); konvertuoti String double

pavyzdys

 String str = "8955"; int q = Integer.parseInt(str); System.out.println("Output>>> " + q); // Output: 8955 

 String str = "89.55"; double q = Double.parseDouble(str); System.out.println("Output>>> " + q); // Output: 89.55 
7
14 сент. atsakymą pateikė Vishal Yadav 14 sep. 2017-09-14 22:45 '17, 10:45 pm 2017-09-14 22:45
 int foo=Integer.parseInt("1234"); 

Įsitikinkite, kad eilutėje nėra ne skaitmeninių duomenų.

7
20 апр. IKing atsakymas, pateiktas balandžio 20 d 2016-04-20 12:54 '16 at 12:54 2016-04-20 12:54

Aš šiek tiek nustebęs, kad niekas nepaminėjo „Integer“ konstruktoriaus, kuris, kaip parametrą, laiko eilutę.
Taigi, čia:

 String myString = "1234"; int i1 = new Integer(myString); 

Java 8 - Integer (eilutė) .

Žinoma, konstruktorius grąžins tipą Integer , o atsijungimo operacija verte paverčia int .


Svarbu pažymėti
Šis konstruktorius skambina parseInt metodu.

 public Integer(String var1) throws NumberFormatException { this.value = parseInt(var1, 10); } 
6
23 апр. atsakymą pateikė djm.im balandžio 23 d 2018-04-23 23:49 '18, 11:49 PM 2018-04-23 23:49

Čia mes einame

 String str="1234"; int number = Integer.parseInt(str); print number;//1234 
6
20 нояб. Atsakymas, kurį pateikė Shivanandam lapkričio 20 d 2016-11-20 07:24 '16 at 7:24 AM 2016-11-20 07:24

Vienas iš būdų: parseInt (String) grąžina primityvų int

 String number = "10"; int result = Integer.parseInt(number); System.out.println(result); 

Antrasis būdas: valueOf (String) grąžina naują Integer () objektą.

 String number = "10"; Integer result = Integer.valueOf(number); System.out.println(result); 
5
12 авг. Atsakymas, kurį pateikė Pankaj Mandale 12 rugpjūtis 2017-08-12 17:25 '17, 17:25 pm 2017-08-12 17:25

Naudokite „Integer.parseInt“ () ir įdėkite jį į bandomąjį try...catch kad galėtumėte tvarkyti visas klaidas tik tuo atveju, jei įvedamas ne skaitmeninis simbolis.

 private void ConvertToInt(){ String string = txtString.getText(); try{ int integerValue=Integer.parseInt(string); System.out.println(integerValue); } catch(Exception e){ JOptionPane.showMessageDialog( "Error converting string to integer\n" + e.toString, "Error", JOptionPane.ERROR_MESSAGE); } } 
5
11 нояб. atsakymą davė Davidas lapkričio 11 d. 2017-11-11 04:58 '17 at 4:58 2017-11-11 04:58

Tai yra visa programa su visomis teigiamomis, neigiamomis sąlygomis, nenaudojant bibliotekos.

 import java.util.Scanner; public class StringToInt { public static void main(String args[]) { String inputString; Scanner s = new Scanner(System.in); inputString = s.nextLine(); if (!inputString.matches("([+-]?([0-9]*[.])?[0-9]+)")) { System.out.println("Not a Number"); } else { Double result2 = getNumber(inputString); System.out.println("result = " + result2); } } public static Double getNumber(String number) { Double result = 0.0; Double beforeDecimal = 0.0; Double afterDecimal = 0.0; Double afterDecimalCount = 0.0; int signBit = 1; boolean flag = false; int count = number.length(); if (number.charAt(0) == '-') { signBit = -1; flag = true; } else if (number.charAt(0) == '+') { flag = true; } for (int i = 0; i < count; i++) { if (flag  i == 0) { continue; } if (afterDecimalCount == 0.0) { if (number.charAt(i) - '.' == 0) { afterDecimalCount++; } else { beforeDecimal = beforeDecimal * 10 + (number.charAt(i) - '0'); } } else { afterDecimal = afterDecimal * 10 + number.charAt(i) - ('0'); afterDecimalCount = afterDecimalCount * 10; } } if (afterDecimalCount != 0.0) { afterDecimal = afterDecimal / afterDecimalCount; result = beforeDecimal + afterDecimal; } else { result = beforeDecimal; } return result * signBit; } } 
4
01 сент. Atsakymą pateikė Anup Gupta 01 rugsėjis. 2017-09-01 09:53 '17 at 9:53 2017-09-01 09:53

Beje, nepamirškite, kad jei eilutė yra nulis, skambinkite:

 int i = Integer.parseInt(null); 

išmeta „NumberFormatException“, o ne „NullPointerException“.

3
21 июня '18 в 0:26 2018-06-21 00:26 atsakymą pateikė Pavelas Molchanovas birželio 18 d. 18 val. 0:26 2018-06-21 00:26
  • 1
  • 2

Kiti klausimai apie „ žymes arba Užduoti klausimą