Преобразование из строки в число в Java
Очень часто требуется преобразовать число в текст, и эта статья посвящена способам как это можно сделать в языке Java.
Простой пример преобразования “ string to integer” в java
Всего одна строка решает вопрос перевода строки в число.
inti = Integer.parseInt(myString);
Нельзя забывать о возможных исключениях. Но в случае если myString содержит в себе действительно число из диапазона int, к примеру “4” или“-100”, то при выполнении кода значение переменной будет преобразовано в тип int.
Полный пример перевода string в int
Полный пример включает дополнительный код:
publicclassJavaStringToIntExample{publicstaticvoidmain (String[] args){// Strings = «fred»;//
Проведение теста на наличие исключения Strings = «100»;try{// Переводим String в int<spanclass=»strong»>inti = Integer.parseInt(s.trim());</span>// Вывод преобразованного значения System.out.println(«inti = » + i);}catch (NumberFormatExceptionnfe){System.out.println(«NumberFormatException: » + nfe.getMessage());}}}
Строка кода содержит обработку исключения вне диапазона NumberFormatException. В примере показан полный перевод из строкового типа в формат целого числа. Это исключение можно обработать и вручную.
Преобразования базовых типов данных
Каждой базовый тип отличается от другого количеством занимаемой памяти. Поэтому нельзя например перевести тип, который занимает много памяти, в тот, который занимает меньше. Если логический тип int перевести в byte, то произойдет ошибка:
int a = 4;
byte b = a; // ! Ошибка
Несмотря на то, что тип int укладывается в диапазон byte – компиляция указывает на ошибку в коде. В языке Java нельзя перевести данные из типа размером 4 байта в 1, как в примере выше.
Если такое преобразование требуется, но нужно использовать соответствующую операцию:
int a = 4;
byte b = (byte)a;// преобразование типов: из типа int в тип byte
Синтаксис операции преобразования типов выглядит так — ().В скобках указывается название типа, к которому нужно перевести переменную.
Явные и неявные преобразования
Когда нужно совершать действия с разными типами данных, не всегда обязательно выполнять преобразования при помощи операции преобразования типов.
Автоматические преобразования
Есть типы, которые преобразуются автоматически, или, как это называется в программировании, неявно. Неявно можно преобразовать:
- byte в short
- short в int
- char в int
- int в long
- int в double
- float в double
С потерей точности автоматически переводятся:
- int в float
- long в float
- long в double
Неявно преобразовываются так называемые расширяющие преобразования, когда значение меньшего объема переводится в большее, и начинает занимать больше памяти.
Явные преобразования
Все преобразования кроме указанных выше необходимо выполнять явно, чтобы избежать ошибок при выполнении кода. Уменьшение разряда в типах называется сужающим преобразованием, и выполняется как на примере ниже:
long a = 4;
int b = (int) a;
Преобразования при операциях
Преобразование типов происходит даже при сложении и вычитании, и других математических операциях, хотя этого можно не заметить. Правила преобразований при операциях:
- если один из операндов принадлежит типу double, то второй тоже будет преобразован к этому типу
- если условие выше не выполняется, то если один из операндов float, то второй тоже будет преобразован во float
- если условия выше не соблюдены, и один из операндов – long, то и второй будет преобразован к long
- иначе оба операнда приводятся к типу int
Потеря данных при преобразовании
При явном преобразовании часто происходят потери данных. Например в коде ниже проблем не возникает:
int a = 5;
byte b = (byte) a;
Значение 5 входит в диапазон byte, и при преобразовании не получается никаких потерь. Но если же мы выполним следующий код:
int a = 258;
byte b = (byte) a;
То получим число 2 в результате усечения значения int до диапазона byte. Значения byte занимают всего 8 бит памяти компьютера, и соответственно физически не могут вместить число 258 полностью.
Метод valueOf
Существует второй способ преобразования строки в целочисленный тип. Например между двумя методами существует разница:
Integer x = Integer.valueOf(myString);
int y = Integer.parseInt(myString);
Применение valueOf возвращает новый или кэшированный экземпляр java.lang.Integer.
Выполнение преобразования stringtobyte
Данное действие можно выполнить следующими способами.
Используя конструктор:
try {
Byte b1 = new Byte(«10»);
System.out.println(b1);
} catch (NumberFormatException e) {
System.err.println(«Неверный формат входной строки!»);
}
Используя метод класса BytevalueOf:
String str1 = «141»;
try {
Byte b2 = Byte.valueOf(str1);
System.out.println(b2);
} catch (NumberFormatException e) {
System.err.println(«Неверный формат входной строки!»);
}
Используя метод класса ByteparseByte:
byte b = 0;
String str2 = «108»;
try {
b = Byte.parseByte(str2);
System.out.println(b);
} catch (NumberFormatException e) {
System.err.println(«Неправильный формат строки!»);
}
Для примера приведем перевод из типа Byte обратно в текстовый тип:
//перевод в битовый тип данных
String str3 = «20150»;
byte[] b3 = str3.getBytes();
System.out.println(b3);//перевод в string в обратную сторону
try {
String s = new String(b3, «cp1251»);
System.out.println(s);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Преобразование разных числовых типов в строку в Java
int to String
inti = 53;
String str = Integer.toString(i);
System.out.println(str);
double to String
double i = 31.6e10;
String str = Double.toString(i);
System.out.println(str);
long to String
long i = 3422222;
String str = Long.toString(i);
System.out.println(str);
float to String
float i = 3.98f;
String str = Float.toString(i);
System.out.println(str);