Как я могу преобразовать String
вint
в Java?
Моя строка содержит только цифры, и я хочу вернуть число, которое она представляет.
Например, учитывая строку, "1234"
результатом должен быть номер 1234
.
java
string
int
type-conversion
Неизвестный пользователь
источник
источник
Ответы:
Если вы посмотрите на документацию по Java, вы заметите «уловку»
NumberFormatException
, заключающуюся в том, что эта функция может выдавать , что, конечно же, вы должны обработать:(По умолчанию это неправильное число
0
, но вы можете сделать что-нибудь еще, если хотите.)Кроме того, вы можете использовать
Ints
метод из библиотеки Guava, который в сочетании с Java 8Optional
делает мощный и лаконичный способ преобразования строки в int:источник
int foo = NumberUtils.toInt(myString, 0);
Например, вот два способа:
Существует небольшая разница между этими методами:
valueOf
возвращает новый или кэшированный экземплярjava.lang.Integer
parseInt
возвращает примитивint
.То же самое для всех случаев:
Short.valueOf
/parseShort
,Long.valueOf
/parseLong
и т. Д.источник
valueOf
Метод простоreturn valueOf(parseInt(string));
valueOf
называет себя рекурсивно?valueOf(String)
Реализуется, сначала анализируя строку String с помощью int,parseInt(String)
а затем оборачивая это int в целое число с помощьюvalueOf(int)
. Нет рекурсия здесь , потому чтоvalueOf(String)
иvalueOf(int)
две совершенно разные функции, даже если они имеют такое же имя.Что ж, очень важный момент, который следует учитывать, заключается в том, что синтаксический анализатор Integer генерирует NumberFormatException, как указано в Javadoc .
Важно обрабатывать это исключение при попытке получить целочисленные значения из разделенных аргументов или динамического анализа чего-либо.
источник
"([0-9]+)"
воли «захватывает» первую последовательность из одной или нескольких цифр от одной до девяти. Посмотрите наMatcher
класс в этом пакете.Сделайте это вручную:
источник
Integer.parseInt(s)
? - Я вижу смысл в том, что это вопрос на собеседовании, но а) это не означает, что вы сделаете это таким образом (о чем спрашивал спрашивающий), и б) этот ответ в любом случае довольно плохой пример.Integer.parseInt
потому что он не проверяет.Альтернативным решением является использование NumberUtils Apache Commons :
Утилита Apache хороша тем, что если строка имеет неверный числовой формат, то всегда возвращается 0. Таким образом, вы сэкономите блок try catch.
Apache NumberUtils API версии 3.4
источник
В настоящее время я выполняю задание для колледжа, где не могу использовать определенные выражения, такие как приведенные выше, и, просмотрев таблицу ASCII, мне удалось это сделать. Это гораздо более сложный код, но он может помочь другим, которые ограничены, как я.
Первое, что нужно сделать, это получить ввод, в данном случае, строку цифр; Я позвоню
String number
, и в этом случае я приведу пример, используя номер 12, поэтомуString number = "12";
Другим ограничением было то, что я не мог использовать повторяющиеся циклы, поэтому
for
цикл (который был бы идеален) также нельзя использовать. Это немного ограничивает нас, но опять же, это цель. Так как мне нужны были только две цифры (последние две цифры), яcharAt
решил простую :Имея коды, нам просто нужно взглянуть на таблицу и внести необходимые коррективы:
Теперь, почему двойной? Ну, из-за действительно "странного" шага. В настоящее время у нас есть два типа double, 1 и 2, но нам нужно превратить его в 12, мы не можем выполнить математическую операцию.
Мы делим последнее (lastdigit) на 10 в моде
2/10 = 0.2
(следовательно, почему double) следующим образом:Это просто игра с числами. Мы превращали последнюю цифру в десятичную. Но теперь посмотрим, что происходит:
Не вдаваясь в математику, мы просто выделяем единицы из цифр числа. Видите ли, поскольку мы учитываем только 0-9, деление на кратное 10 похоже на создание «ящика», в котором вы его храните (вспомните, когда учитель первого класса объяснил вам, что такое единица и сотня). Так:
И вот, пожалуйста. Вы превратили строку цифр (в данном случае две цифры) в целое число, состоящее из этих двух цифр, учитывая следующие ограничения:
источник
'0'
ее вместо символа48
и никогда не должны возиться с его фактическим числовым значением. В-третьих, весь обходdouble
ценностей не имеет никакого смысла, поскольку вы делите на десять, просто умножить на десять потом. Результат просто такой же,semilastdigit * 10 + lastdigit
как в начальной школе, когда была введена десятичная система ...semilastdigit
иlastdigit
. Как бы вы кодировали свое решение, чтобы избежать «повторяющихся циклов», если бы я предоставил вам допустимую числовую строку произвольной длины (т. Е. Любое значение между «-2147483648» и «2147483647»?)Integer.decode
Вы также можете использовать
public static Integer decode(String nm) throws NumberFormatException
.Это также работает для базы 8 и 16:
Если вы хотите получить
int
вместоInteger
вы можете использовать:Распаковка:
intValue()
:источник
Всякий раз, когда есть малейшая вероятность того, что данная строка не содержит целое число, вы должны обработать этот особый случай. К сожалению, стандартные методы Java
Integer::parseInt
иInteger::valueOf
броситьNumberFormatException
чтобы сигнализировать этот особый случай. Таким образом, вы должны использовать исключения для управления потоком, что обычно считается плохим стилем кодирования.На мой взгляд, этот особый случай должен быть обработан путем возврата пустого
Optional<Integer>
. Поскольку Java не предлагает такой метод, я использую следующую оболочку:Пример использования:
Хотя это все еще использует исключения для управления потоком внутри, код использования становится очень чистым. Кроме того, вы можете четко различить случай, когда
-1
синтаксический анализ обрабатывается как допустимое значение, и случай, когда недопустимая строка не может быть проанализирована.источник
Преобразование строки в int сложнее, чем просто преобразование числа. Вы думаете о следующих проблемах:
источник
Методы для этого:
Integer.valueOf выдает объект Integer, все остальные методы - примитив int.
Последние 2 метода от commons-lang3 и большая статья о конвертации здесь .
источник
Мы можем использовать
parseInt(String str)
методInteger
оболочки для преобразования значения String в целочисленное значение.Например:
Integer
Класс также обеспечиваетvalueOf(String str)
метод:Мы также можем использовать
toInt(String strValue)
в NumberUtils Utility класса для преобразования:источник
Использование
Integer.parseInt(yourString)
.Запомните следующие вещи:
Integer.parseInt("1");
// ХорошоInteger.parseInt("-1");
// ХорошоInteger.parseInt("+1");
// ХорошоInteger.parseInt(" 1");
// Исключение (пробел)Integer.parseInt("2147483648");
// Исключение (целое число ограничено максимальным значением 2 147 483 647)Integer.parseInt("1.1");
// Исключение ( . Или , или что не разрешено)Integer.parseInt("");
// Исключение (не 0 или что-то)Существует только один тип исключения:
NumberFormatException
источник
У меня есть решение, но я не знаю, насколько оно эффективно. Но это работает хорошо, и я думаю, что вы могли бы улучшить это. С другой стороны, я сделал пару тестов с JUnit, которые выполняются правильно. Я прикрепил функцию и тестирование:
Тестирование с помощью JUnit:
источник
(int) Double.parseDouble(input.replaceAll("[^0-9\\.\\-]", ""));
В Google Guava есть tryParse (String) , который возвращает,
null
если строка не может быть проанализирована, например:источник
Вы также можете начать с удаления всех нечисловых символов, а затем проанализировать целое число:
Но имейте в виду, что это работает только для неотрицательных чисел.
источник
-42
к анализу как42
."4+2"
, я получу42
в результате без намека на то, что то, что я пытался сделать, было неверным. У пользователя будет впечатление, что ввод базовых выражений, как это4+2
было допустимым вводом, но приложение продолжает работать с неверным значением. Кроме того, типString
, а неstring
...Помимо предыдущих ответов, я хотел бы добавить несколько функций. Это результаты, пока вы их используете:
Реализация:
источник
Как уже упоминалось, Apache Commons '
NumberUtils
может это сделать. Возвращается0
если не может преобразовать строку в int.Вы также можете определить свое собственное значение по умолчанию:
Пример:
источник
Вы также можете использовать этот код с некоторыми мерами предосторожности.
Вариант № 1: Обработка исключения в явном виде, например, показ диалогового окна сообщения, а затем остановка выполнения текущего рабочего процесса. Например:
Вариант № 2: Сброс уязвимой переменной, если выполнение потока может продолжаться в случае исключения. Например, с некоторыми изменениями в блоке catch
Использование строковой константы для сравнения или любого рода вычислений всегда является хорошей идеей, потому что константа никогда не возвращает нулевое значение.
источник
JOptionPane.showMessageDialog()
ответа на ванильный вопрос Java не имеет смысла.Integer.valueOf(String);
не возвращает типint
.Вы можете использовать
new Scanner("1244").nextInt()
. Или спросите, существует ли даже int:new Scanner("1244").hasNextInt()
источник
В соревнованиях по программированию, где вы уверены, что число всегда будет действительным целым числом, вы можете написать свой собственный метод для анализа ввода. Это пропустит весь код, связанный с проверкой (так как он вам не нужен), и будет немного более эффективным.
Для действительного положительного целого числа:
Для положительных и отрицательных целых чисел:
Если вы ожидаете пробел до или после этих чисел, обязательно сделайте
str = str.trim()
перед обработкой.источник
Просто вы можете попробовать это:
Integer.parseInt(your_string);
для преобразованияString
вint
Double.parseDouble(your_string);
для преобразованияString
вdouble
пример
источник
Для нормальной строки вы можете использовать:
Для строителя строк и буфера строк можно использовать:
источник
Убедитесь, что в строке нет нечисловых данных.
источник
Я немного удивлен, что никто не упомянул конструктор Integer, который принимает String в качестве параметра.
Итак, вот оно:
Java 8 - целое число (строка) .
Конечно, конструктор вернет тип
Integer
, а операция распаковки преобразует значение вint
.Важно отметить : этот конструктор вызывает
parseInt
метод.источник
Используйте Integer.parseInt () и поместите его в
try...catch
блок для обработки любых ошибок на случай, если введен нечисловой символ, например,источник
Вот так
источник
Это можно сделать семью способами:
1) Использование
Ints.tryParse
:2) Использование
NumberUtils.createInteger
:3) Использование
NumberUtils.toInt
:4) Использование
Integer.valueOf
:5) Использование
Integer.parseInt
:6) Использование
Integer.decode
:7) Использование
Integer.parseUnsignedInt
:источник
Одним из методов является parseInt (String). Возвращает примитив int:
Второй метод - valueOf (String), и он возвращает новый объект Integer ():
источник
Вы можете использовать любой из следующих:
Integer.parseInt(s)
Integer.parseInt(s, radix)
Integer.parseInt(s, beginIndex, endIndex, radix)
Integer.parseUnsignedInt(s)
Integer.parseUnsignedInt(s, radix)
Integer.parseUnsignedInt(s, beginIndex, endIndex, radix)
Integer.valueOf(s)
Integer.valueOf(s, radix)
Integer.decode(s)
NumberUtils.toInt(s)
NumberUtils.toInt(s, defaultValue)
источник
Это полная программа со всеми положительными и отрицательными условиями без использования библиотеки
источник
Integer.parseInt
.