конвертировать данные из строки в integer / numeric [duplicate]

для меня довольно простой и надежный способ - просто сделать метод вызывающего метода следующим образом:

public static object methodCaller(String methodName)
{
    if(methodName.equals("getName"))
        return className.getName();
}

, тогда, когда вам нужно вызвать метод, просто поставьте что-то вроде этого

//calling a toString method is unnessary here, but i use it to have my programs to both rigid and self-explanitory 
System.out.println(methodCaller(methodName).toString()); 
2616
задан Peter Mortensen 18 January 2018 в 00:49
поделиться

30 ответов

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

Дополнительную информацию см. в документации по Java .

3566
ответ дан Ripon Al Wasim 15 August 2018 в 21:37
поделиться
  • 1
    Это приведет к NumberFormatException , если вход не является допустимым числом. – Francesco Menzani 28 August 2015 в 16:05
  • 2
    Помимо улавливания исключения NumberFormatException, пользователь должен также быть осторожным в отношении длины строк, которые они передают; если они достаточно длинны, чтобы переполнить целое число, они могут захотеть вместо этого использовать Long :: parseLong. – Allison 17 January 2018 в 10:37
  • 3
    @Allison, особенно если вы используете поле BIGINT в поле с добавочным первичным ключом PostgreSQL, например. Гораздо безопаснее использовать длинные – Letholdrus 22 January 2018 в 20:18
  • 4
    Вы можете проверить, является ли строка первым: stackoverflow.com/questions/1102891/… – JPRLCol 25 January 2018 в 21:17
  • 5
    Этот метод также выдает исключение, когда строка не является синтаксическим целым в базе 10. Используйте перегруженный метод для работы в других базах. например Integer.parseInt («1001», 8); для базы 8. Источник . – lokesh 8 August 2018 в 11:00

Просто вы можете попробовать следующее:

  • Используйте Integer.parseInt(your_string); для преобразования String в int
  • Используйте Double.parseDouble(your_string); для преобразования String к double

Пример

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
6
ответ дан 6 revs, 5 users 58% 15 August 2018 в 21:37
поделиться
  • 1
    Этот ответ, похоже, не добавляет ничего, кроме ответов, рекомендующих Integer.parseInt опубликовать несколько лет назад (преобразование String в double будет другим вопросом ). – Dukeling 30 December 2017 в 20:43

Для нормальной строки вы можете использовать:

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

Для String builder и String buffer вы можете использовать:

Integer.parseInt(myBuilderOrBuffer.toString());
5
ответ дан Aditya 15 August 2018 в 21:37
поделиться

Как уже упоминалось, Apache Commons NumberUtils может это сделать. Какой возврат 0, если он не может преобразовать строку в int.

Вы также можете определить свое собственное значение по умолчанию.

NumberUtils.toInt(String str, int defaultValue)

example:

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; 
7
ответ дан Alireza Fattahi 15 August 2018 в 21:37
поделиться

Например, это два способа:

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

Между этими методами существует небольшая разница:

  • valueOf возвращает новый или кешированный экземпляр java.lang.Integer
  • parseInt возвращает примитив int.

То же самое для всех случаев: Short.valueOf / parseShort, Long.valueOf / parseLong и т. д.

589
ответ дан Andrey Akhmetov 15 August 2018 в 21:37
поделиться

Это полная программа со всеми положительными условиями, отрицательными без использования библиотеки

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;
     }
    }
3
ответ дан Anup Gupta 15 August 2018 в 21:37
поделиться
  • 1
    Нет необходимости изобретать велосипед, просто используйте Integer.parseInt. – Tobias Weimer 10 November 2017 в 12:38
  • 2
    @TobiasWeimer да, мы можем это сделать, но это без использования библиотеки – Anup Gupta 11 November 2017 в 06:38
  • 3
    Я вижу это, но в чем смысл не использовать библиотеку? – Tobias Weimer 11 November 2017 в 09:15
  • 4
    @TobiasWeimer, некоторым людям это нужно, чтобы обойтись без использования библиотеки. – Anup Gupta 11 November 2017 в 15:26
  • 5
    Нет, никто не нуждается в этом, потому что это функция внутри JDK, а не какой-то сторонний плагин. – Tobias Weimer 11 November 2017 в 16:00

Используйте Integer.parseInt(yourString)

Помните следующие вещи:

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

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

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

Integer.parseInt(" 1"); // Исключение (пустое пространство)

Integer.parseInt("2147483648"); // Исключение (целое число ограничено максимальное значение из 2,147,483,647)

Integer.parseInt("1.1"); // Исключение (или, или что-то еще не разрешено)

Integer.parseInt(""); // Исключение (не 0 или что-то)

Существует только один тип исключения: NumberFormatException

15
ответ дан Basil Bourque 15 August 2018 в 21:37
поделиться

Сделайте это вручную:

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
ответ дан Boann 15 August 2018 в 21:37
поделиться
  • 1
    Что делать, если вход больше 2 ^ 32? Что делать, если ввод содержит нечисловые символы? – yohm 22 October 2014 в 04:43
  • 2
    Одна из вещей, которую программист должен изучить при вступлении в рабочую силу, если не раньше, никогда не будет изобретать колеса. Это может быть забавное упражнение, но не ожидайте, что ваш код пройдет проверку кода, если вы делаете это в коммерческой среде. – Dawood ibn Kareem 1 January 2016 в 05:16
  • 3
    @yohm это особый случай; вы можете обрабатывать длинное и некоторое регулярное выражение; однако к этому моменту вы можете использовать parseInt. – Billz 1 January 2016 в 06:18
  • 4
    -1 Извините, но это довольно плохой алгоритм с множеством ограничений, без обработки ошибок и некоторыми необычными аномалиями (например, «дает» исключение, «-» будет создавать 0 и «+», производит -5). Зачем кому-то выбирать это по Integer.parseInt(s)? - Я вижу, что это вопрос интервью, но а) это не означает, что вы сделаете это так (это то, о чем спрашивал собеседник), и б) этот ответ является довольно плохим примером. – SusanW 28 July 2016 в 17:27
  • 5
    Я полагаю, этот ответ для любопытных товарищей ... – Timur Milovanov 19 June 2018 в 12:50

Вы можете использовать new Scanner("1244").nextInt(). Или спросите, существует ли даже int: new Scanner("1244").hasNextInt()

8
ответ дан Christian Ullenboom 15 August 2018 в 21:37
поделиться

Я немного удивлен, что никто не упоминает конструктор Integer, который берет String в качестве параметра. Итак, вот:

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

Java 8 - Integer (String) .

Конечно, конструктор вернет тип Integer, а операция распаковки автоматически преобразуется в int.


Важно упомянуть . Этот конструктор вызывает метод parseInt.

public Integer(String var1) throws NumberFormatException {
    this.value = parseInt(var1, 10);
}
3
ответ дан djm.im 15 August 2018 в 21:37
поделиться
int foo=Integer.parseInt("1234");

Убедитесь, что в строке нет нечисловых данных.

5
ответ дан iamnotmaynard 15 August 2018 в 21:37
поделиться
  • 1
    Это точно так же, как выбор ответа. – Steve Smith 14 June 2017 в 11:15
  • 2
    Я дал свой ответ здесь. – iKing 4 October 2017 в 10:09
  • 3
    На сайте нет никакой ценности, повторяя ответ, что кто-то еще отправил ПЯТЬ ЛЕТ перед вами. – Dawood ibn Kareem 29 October 2017 в 19:28

Альтернативное решение заключается в использовании Apache Commons ' NumberUtils:

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

Утилита Apache хороша, потому что, если строка является недопустимым числовым форматом, тогда 0 всегда возвращается , Следовательно, вы сохраняете блок catch try.

Apache NumberUtils API Version 3.4

33
ответ дан Jonah Graham 15 August 2018 в 21:37
поделиться
  • 1
    Вы редко хотите, чтобы значение 0 использовалось при анализе недействительного числа. – wnoise 22 March 2016 в 16:18
  • 2
    Zero - это то, что java использует по умолчанию, если int-объект на объекте не задан. Поэтому в этом смысле это имеет смысл. – Ryboflavin 19 April 2016 в 18:42
  • 3
    @Ryboflavin Нет, это не так. Одним из них является четко определенная языковая семантика, а другая - исключение – etherous 1 June 2017 в 22:25

Вы также можете использовать этот код с некоторыми предосторожностями.

  • Параметр # 1: обрабатывать исключение явно, например, показывать диалог сообщения и останавливать выполнение текущего рабочего процесса. Например:
    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: сброс затронутой переменной, если поток выполнения может продолжаться в случае исключения. Например, с некоторыми изменениями в блоке catch
    catch (NumberFormatException ex) {
        integerValue = 0;
    }
    

Использование строковой константы для сравнения или любого рода вычислений всегда является хорошей идеей, поскольку константа никогда не возвращает нулевое значение.

7
ответ дан manikant gautam 15 August 2018 в 21:37
поделиться
  • 1
    Ввод JOptionPane.showMessageDialog() в ответе на вопрос ванильного Java не имеет смысла. – John Hascall 4 March 2016 в 23:05
  • 2
    Integer.valueOf(String); не возвращает тип int. – php_coder_3809625 26 April 2016 в 23:54

Помимо этих выше ответов, я хотел бы добавить несколько функций:

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

И вот результаты при их запуске:

  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
  }
9
ответ дан nxhoaf 15 August 2018 в 21:37
поделиться

Один из методов: parseInt (String) возвращает примитив int

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

Второй метод: valueOf (String) возвращает новый объект Integer ().

String number = "10";
Integer result = Integer.valueOf(number);
System.out.println(result);
4
ответ дан Pankaj Mandale 15 August 2018 в 21:37
поделиться

Кстати, помните, что если строка равна null, вызов:

int i = Integer.parseInt(null);

выдает NumberFormatException, а не исключение NullPointerException.

2
ответ дан Pavel Molchanov 15 August 2018 в 21:37
поделиться

Используйте Integer.parseInt () и помещайте его внутри блока try...catch для обработки любых ошибок только в случае ввода нечислового символа, например,

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);
    }
 }
216
ответ дан Peter Mortensen 15 August 2018 в 21:37
поделиться
  • 1
    Это приведет к анализу -42 как 42. – user 11 October 2014 в 15:00
  • 2
    Использование типа double для синтаксического анализа целого числа - это не только плохая идея с точки зрения производительности. Значения типа 0.2 являются периодическими числами в представлении с плавающей запятой и не могут быть представлены точно. Попробуйте System.out.println (0.1 + 0.2), чтобы увидеть точку - результат не будет равен 0,3! Лучше придерживаться библиотечного кода, где бы вы ни были, в этом случае Integer.parseInt (). – ChrisB 14 August 2015 в 14:23
  • 3
    Неясно, в какой проблеме этот ответ пытается решить, во-первых, почему у кого-то должно быть такое ограничение, которое вы описываете, во-вторых, почему вы должны смотреть таблицу ASCII, так как вы можете просто использовать '0' для символа вместо 48 и никогда не должны беспокоиться о его фактическом числовом значении. В-третьих, весь объезд с double значениями не имеет никакого смысла, поскольку вы делите на десять, чтобы размножаться с десятью позже. Результат просто semilastdigit * 10 + lastdigit, как учился в начальной школе, когда была введена десятичная система ... – Holger 4 March 2016 в 11:47
  • 4
    Да, это работает только для не отрицательных чисел, которые правильны для начала и, следовательно, не нуждаются в этом шаге замены. Для каждого другого случая, эта попытка автоматически исправить это, ухудшит ситуацию (как почти каждая попытка автоматически исправить что-то). Если я перейду в "4+2", я получу 42 в результате без всякого намека на то, что то, что я пытался сделать, было ошибочным. Пользователь получит впечатление, что ввод основных выражений, таких как 4+2, является допустимым вводом, но приложение продолжает с неправильным значением. Кроме того, тип String, а не string ... – Holger 4 March 2016 в 12:01
  • 5
    @Holger Мне лично было дано это ограничение при первом запуске программирования, а также когда мне пришлось писать (ручку / бумагу) аналогичные взаимодействия в тесте. Это необычно, но это метод, который легко понять и, хотя он не является самым эффективным по милям, - это метод, который достаточно подходит для небольших проектов. SO.SE призван помочь всем, а не только некоторым. Я представил альтернативный метод для тех, кто начинает с изучения, как создать псевдо-алгоритм и превратить его в алгоритм, а не использовать готовые java-выражения. Хотя я и забыл, что «0» классно – Oak 2 May 2016 в 08:49
  • 6
    Или измените первую строку на - & gt; string mystr = mystr.replaceAll (& quot; [^ \\ d \\ -] "," & quot; "); – apm 19 August 2016 в 10:57
  • 7
    Если вы спросите меня, он выдает NFE, если вы доставляете неверную строку Integer ... – KarelG 20 February 2017 в 11:19
  • 8
    @Holger Если бы я увидел, что кто-то написал это на работе, я бы переместил их с моей команды. Он не прошел бы проверку с довольно большим радиусом взрыва. Практически нет никакого случая, когда он делает правильную вещь: он создает неожиданный, странный, «WTF». Результаты. Пожалуйста, никто этого не делает! – SusanW 22 March 2017 в 09:42
  • 9
    @KarelG Да, да. Этот код выше бесполезен. – Tobias Weimer 25 August 2017 в 21:23
  • 10
    как я могу разобрать "26263Hello & quot; ? Я хочу извлечь 26263 в этом случае – user463035818 16 May 2018 в 08:01
  • 11
    @ user463035818 - См. docs.oracle.com/javase/8/docs/api/java/util/regex/… - регулярный шаблон выражения "([0-9]+)" будет «захватывать». первая последовательность из одной или нескольких цифр от одной до девяти. Посмотрите на класс Matcher в этом пакете. – Mark Stewart 8 June 2018 в 16:16
  • 12
    return -1 в случае null выглядит действительно странно ... что, если я хочу разобрать «-1»? строка? – Dmytro Shvechikov 7 August 2018 в 08:47

В соревнованиях по программированию, где вы уверены, что число всегда будет действительным целым числом, вы можете написать собственный метод для синтаксического анализа.

  1. Для действительного положительного целого:
    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;
    }
    
  2. ] Как для положительных, так и для отрицательных целых чисел:
    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;
    }
    
  3. Если вы ожидаете пробел до или после этих чисел, убедитесь, что перед обработкой обязательно выполните str = str.trim().
7
ответ дан Raman Sahasi 15 August 2018 в 21:37
поделиться

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. Unboxing:
    int val = Integer.decode("12"); 
    
  2. intValue():
    Integer.decode("12").intValue();
    
27
ответ дан ROMANIA_engineer 15 August 2018 в 21:37
поделиться
  • 1
    В заключение! Кто-то, кто действительно хочет опубликовать результаты / вывод конверсий! Можете ли вы также добавить некоторые с помощью & quot; - & quot; знаки? – not2qubit 27 April 2017 в 11:42

Здесь мы идем

String str="1234";
int number = Integer.parseInt(str);
print number;//1234
5
ответ дан Shivanandam Sirmarigari 15 August 2018 в 21:37
поделиться

Преобразование строки в int более сложно, чем просто преобразование числа. Вы думаете о следующих проблемах:

  • Строка содержит только цифры 0-9?
  • Что происходит с - / + до или после строки? Возможно ли это (ссылаясь на учетные номера)?
  • Что случилось с MAX _- / MIN_INFINITY? Что произойдет, если строка 99999999999999999999? Может ли машина обрабатывать эту строку как int?
19
ответ дан smac89 15 August 2018 в 21:37
поделиться
  • 1
    Да - и есть неприятный крайный случай вокруг -2 ^ 31. Если вы попытаетесь отрицать 2 ^ 31, вы можете столкнуться с трудностями ...... – SusanW 5 October 2016 в 22:52

Всякий раз, когда имеется малейшая вероятность того, что данная строка не содержит Integer, вам придется обрабатывать этот специальный случай. К сожалению, стандартные Java-методы Integer::parseInt и Integer::valueOf выдают NumberFormatException, чтобы сигнализировать об этом специальном случае. Таким образом, вы должны использовать исключения для управления потоком, которые обычно считаются плохим стилем кодирования.

На мой взгляд, этот особый случай должен быть обработан возвратом Optional<Integer>. Поскольку Java не предлагает такой метод, я использую следующую оболочку:

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

Использование:

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

Хотя это все еще использует исключения для управления потоком внутри, использование код становится очень чистым.

20
ответ дан Stefan Dollase 15 August 2018 в 21:37
поделиться

Методы для этого:

 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 создает объект Integer, все остальные методы - примитивный int.

Последние 2 метода из commons-lang3 и большой статьи о преобразовании здесь .

14
ответ дан Sundararaj Govindasamy 15 August 2018 в 21:37
поделиться

Мы можем использовать метод parseInt(String str) класса оболочки Integer для преобразования значения String в целочисленное значение.

Например:

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

Integer также предоставляет метод valueOf(String str):

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

Мы можем также использовать toInt(String strValue) из класса Utility Utility для преобразования:

String strValue = "12345";
Integer intValue = NumberUtils.toInt(strValue);
18
ответ дан Tom 15 August 2018 в 21:37
поделиться

Guava имеет tryParse (String) , который возвращает null, если строка не может быть проанализирована, например:

Integer fooInt = Ints.tryParse(fooString);
if (fooInt != null) {
  ...
}
12
ответ дан Vitalii Fedorenko 15 August 2018 в 21:37
поделиться

Вы также можете начать с удаления всех нечисловых символов и затем разбора int:

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

. Но следует предупредить, что это работает только для неотрицательных чисел.

216
ответ дан Peter Mortensen 15 August 2018 в 21:37
поделиться
  • 1
    Это приведет к анализу -42 как 42. – user 11 October 2014 в 15:00
  • 2
    Использование типа double для синтаксического анализа целого числа - это не только плохая идея с точки зрения производительности. Значения типа 0.2 являются периодическими числами в представлении с плавающей запятой и не могут быть представлены точно. Попробуйте System.out.println (0.1 + 0.2), чтобы увидеть точку - результат не будет равен 0,3! Лучше придерживаться библиотечного кода, где бы вы ни были, в этом случае Integer.parseInt (). – ChrisB 14 August 2015 в 14:23
  • 3
    Неясно, в какой проблеме этот ответ пытается решить, во-первых, почему у кого-то должно быть такое ограничение, которое вы описываете, во-вторых, почему вы должны смотреть таблицу ASCII, так как вы можете просто использовать '0' для символа вместо 48 и никогда не должны беспокоиться о его фактическом числовом значении. В-третьих, весь объезд с double значениями не имеет никакого смысла, поскольку вы делите на десять, чтобы размножаться с десятью позже. Результат просто semilastdigit * 10 + lastdigit, как учился в начальной школе, когда была введена десятичная система ... – Holger 4 March 2016 в 11:47
  • 4
    Да, это работает только для не отрицательных чисел, которые правильны для начала и, следовательно, не нуждаются в этом шаге замены. Для каждого другого случая, эта попытка автоматически исправить это, ухудшит ситуацию (как почти каждая попытка автоматически исправить что-то). Если я перейду в "4+2", я получу 42 в результате без всякого намека на то, что то, что я пытался сделать, было ошибочным. Пользователь получит впечатление, что ввод основных выражений, таких как 4+2, является допустимым вводом, но приложение продолжает с неправильным значением. Кроме того, тип String, а не string ... – Holger 4 March 2016 в 12:01
  • 5
    @Holger Мне лично было дано это ограничение при первом запуске программирования, а также когда мне пришлось писать (ручку / бумагу) аналогичные взаимодействия в тесте. Это необычно, но это метод, который легко понять и, хотя он не является самым эффективным по милям, - это метод, который достаточно подходит для небольших проектов. SO.SE призван помочь всем, а не только некоторым. Я представил альтернативный метод для тех, кто начинает с изучения, как создать псевдо-алгоритм и превратить его в алгоритм, а не использовать готовые java-выражения. Хотя я и забыл, что «0» классно – Oak 2 May 2016 в 08:49
  • 6
    Или измените первую строку на - & gt; string mystr = mystr.replaceAll (& quot; [^ \\ d \\ -] "," & quot; "); – apm 19 August 2016 в 10:57
  • 7
    Если вы спросите меня, он выдает NFE, если вы доставляете неверную строку Integer ... – KarelG 20 February 2017 в 11:19
  • 8
    @Holger Если бы я увидел, что кто-то написал это на работе, я бы переместил их с моей команды. Он не прошел бы проверку с довольно большим радиусом взрыва. Практически нет никакого случая, когда он делает правильную вещь: он создает неожиданный, странный, «WTF». Результаты. Пожалуйста, никто этого не делает! – SusanW 22 March 2017 в 09:42
  • 9
    @KarelG Да, да. Этот код выше бесполезен. – Tobias Weimer 25 August 2017 в 21:23
  • 10
    как я могу разобрать "26263Hello & quot; ? Я хочу извлечь 26263 в этом случае – user463035818 16 May 2018 в 08:01
  • 11
    @ user463035818 - См. docs.oracle.com/javase/8/docs/api/java/util/regex/… - регулярный шаблон выражения "([0-9]+)" будет «захватывать». первая последовательность из одной или нескольких цифр от одной до девяти. Посмотрите на класс Matcher в этом пакете. – Mark Stewart 8 June 2018 в 16:16
  • 12
    return -1 в случае null выглядит действительно странно ... что, если я хочу разобрать «-1»? строка? – Dmytro Shvechikov 7 August 2018 в 08:47
216
ответ дан Peter Mortensen 5 September 2018 в 21:12
поделиться
216
ответ дан Peter Mortensen 5 September 2018 в 21:12
поделиться
223
ответ дан Peter Mortensen 29 October 2018 в 04:37
поделиться
223
ответ дан Peter Mortensen 29 October 2018 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: