Как привести int к string java
Как преобразовать String в Int в Java?
Есть несколько способов преобразования String в Integer. Приведу ниже два способа.
Способ 1. Integer.valueOf
Integer a = Integer.valueOf(str);
где str – строка, которую нужно преобразоваться в Integer
Способ 2. Integer.parseInt
int a = Integer.parseInt(str);
где str – строка, которую нужно преобразоваться в int
Разница в этих методах заключается в следующем:
Integer.valueOf – возвращает новый или кэшированный экземпляр java.lang.Integer, а Integer.parseInt – возвращает примитив int.
Так же это работает для: Short.valueOf/parseShort, Long.valueOf/parseLong и т.д.
Преобразование строки в целое или целое число в Java
Преобразование String в int или Integer — очень распространенная операция в Java. В этой статье мы покажем несколько способов решения этой проблемы.
Есть несколько простых способов справиться с этим базовым преобразованием.
2. Целое.parseInt()
Одним из основных решений является использование специального статического метода Integer : parseInt() , который возвращает примитивное значение типа int :
@Test public void givenString_whenParsingInt_shouldConvertToInt() String givenString = "42"; int result = Integer.parseInt(givenString); assertThat(result).isEqualTo(42); >
По умолчанию метод parseInt() предполагает, что данная строка является целым числом с основанием 10. Кроме того, этот метод принимает еще один аргумент для изменения системы счисления по умолчанию. Например, мы можем разобрать бинарные String следующим образом:
@Test public void givenBinaryString_whenParsingInt_shouldConvertToInt() String givenString = "101010"; int result = Integer.parseInt(givenString, 2); assertThat(result).isEqualTo(42); >
Естественно, этот метод также можно использовать с любой другой системой счисления, такой как 16 (шестнадцатеричная) или 8 (восьмеричная).
3. Целое.значениеOf()
Другой вариант — использовать статический метод Integer.valueOf() , который возвращает экземпляр Integer :
@Test public void givenString_whenCallingIntegerValueOf_shouldConvertToInt() String givenString = "42"; Integer result = Integer.valueOf(givenString); assertThat(result).isEqualTo(new Integer(42)); >
Точно так же метод valueOf() также принимает пользовательскую систему счисления в качестве второго аргумента:
@Test public void givenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt() String givenString = "101010"; Integer result = Integer.valueOf(givenString, 2); assertThat(result).isEqualTo(new Integer(42)); >
3.1. Целочисленный кэш
На первый взгляд может показаться, что методы valueOf() и parseInt() совершенно одинаковы. По большей части это правда — даже метод valueOf() внутренне делегирует методу parseInt .
Однако между этими двумя методами есть одно тонкое различие: метод valueOf() внутри использует целочисленный кэш . Этот кеш будет возвращать один и тот же экземпляр Integer для чисел от -128 до 127 :
@Test public void givenString_whenCallingValueOf_shouldCacheSomeValues() for (int i = -128; i 127; i++) String value = i + ""; Integer first = Integer.valueOf(value); Integer second = Integer.valueOf(value); assertThat(first).isSameAs(second); > >
Поэтому настоятельно рекомендуется использовать valueOf() вместо parseInt() для извлечения упакованных целых чисел, так как это может привести к увеличению общей площади нашего приложения.
4. Целочисленный конструктор
Вы также можете использовать конструктор Integer :
@Test public void givenString_whenCallingIntegerConstructor_shouldConvertToInt() String givenString = "42"; Integer result = new Integer(givenString); assertThat(result).isEqualTo(new Integer(42)); >
Начиная с Java 9, этот конструктор устарел в пользу других статических фабричных методов, таких как valueOf() или parseInt() . Даже до этого устаревания использование этого конструктора было редко уместным. Мы должны использовать parseInt() для преобразования строки в примитив типа int или использовать valueOf() для преобразования ее в объект Integer .
5. Целое.decode()
Кроме того, Integer.decode() работает аналогично Integer.valueOf(), но также может принимать различные представления чисел :
@Test public void givenString_whenCallingIntegerDecode_shouldConvertToInt() String givenString = "42"; int result = Integer.decode(givenString); assertThat(result).isEqualTo(42); >
6. Исключение числового формата
Все упомянутые выше методы вызывают исключение NumberFormatException при обнаружении неожиданных значений String . Здесь вы можете увидеть пример такой ситуации:
@Test(expected = NumberFormatException.class) public void givenInvalidInput_whenParsingInt_shouldThrow() String givenString = "nan"; Integer.parseInt(givenString); >
7. С гуавой
Конечно, нам не нужно придерживаться ядра самой Java. Вот как то же самое может быть достигнуто с помощью Ints.tryParse() в Guava, который возвращает нулевое значение, если он не может проанализировать ввод:
@Test public void givenString_whenTryParse_shouldConvertToInt() String givenString = "42"; Integer result = Ints.tryParse(givenString); assertThat(result).isEqualTo(42); >
Кроме того, метод tryParse() также принимает второй аргумент системы счисления , аналогичный parseInt() и valueOf().
8. Заключение
В этой статье мы рассмотрели несколько способов преобразования экземпляров String в экземпляры int или Integer .
Все примеры кода, конечно же, можно найти на GitHub .
Java/Типы данных
В Java есть 8 примитивных типов, которые делят на 4 группы, вот они:
- Целые числа — byte, short, int, long
- Числа с плавающей точкой (иначе вещественные) — float, double
- Логический — boolean
- Символьный — char
Целочисленные типы [ править ]
Целочисленные типы различаются между собой только диапазонами возможных значений, например, для хранения номера элемента в таблице Менделеева пока хватит переменной типа byte.
| Тип | Размер (бит) | Диапазон |
|---|---|---|
| byte | 8 бит | от -128 до 127 |
| short | 16 бит | от -32768 до 32767 |
| char | 16 бит | беззнаковое целое число, представляющее собой символ UTF-16 (буквы и цифры) |
| int | 32 бит | от -2147483648 до 2147483647 |
| long | 64 бит | от -9223372036854775808L до 9223372036854775807L |
Пример использования целочисленных типов:
public class IntegralTypes public static void main(String[] args) byte b = 216; // Вот тут будет ошибка, т.к. у нас диапазон от -128 до 127! short s = 1123; int i = 64536; long l = 2147483648L; // Постфикс l или L обозначает литералы типа long System.out.println(i); System.out.println(b); System.out.println(s); System.out.println(l); > >
Символы тоже относят к целочисленным типам из-за особенностей представления в памяти и традиций.
public class Characters public static void main(String[] args) char a = 'a', b, c = 'c'; b = (char) ((a + c) / 2); // Можно складывать, вычитать, делить и умножать // Но из-за особенностей арифметики Java результат приходится приводить к типу char явно System.out.println(b); // Выведет символ 'b' > >
Типы с плавающей точкой [ править ]
| Тип | Размер (бит) | Диапазон |
|---|---|---|
| float | 32 | от 1.4e-45f до 3.4e+38f |
| double | 64 | от 4.9e-324 до 1.7e+308 |
public class FloatingPointTypes public static void main(String[] args) double a, b = 4.12; a = 22.1 + b; float pi = 3.14f; // При использовании типа float требуется указывать суффикс f или F // так как без них типом литерала будет считаться double float anotherPi = (float) 3.14; // Можно привести явно double c = 27; double d = pi * c; System.out.println(d); > >
Логический тип [ править ]
| Тип | Размер (бит) | Значение |
|---|---|---|
| boolean | 8 (в массивах), 32 (не в массивах используется int) | true (истина) или false (ложь) |
В стандартной реализации Sun JVM и Oracle HotSpot JVM тип boolean занимает 4 байта (32 бита), как и тип int. Однако, в определенных версиях JVM имеются реализации, где в массиве boolean каждое значение занимает по 1-му байту.
Ссылочные [ править ]
Ссылочные типы — это все остальные типы: классы, перечисления и интерфейсы, например, объявленные в стандартной библиотеке Java, а также массивы.
Строки [ править ]
Строки это объекты класса String, они очень распространены, поэтому в некоторых случаях обрабатываются отлично от всех остальных объектов. Строковые литералы записываются в двойных кавычках.
public class Strings public static void main(String[] args) String a = "Hello", b = "World"; System.out.println(a + " " + b); // Здесь + означает объединение (конкатенацию) строк // Пробел не вставляется автоматически // Строки конкатенируются слева направо, надо помнить это когда соединяешь строку и примитив String c = 2 + 2 + ""; // "4" String d = "" + 2 + 2; // "22" d = "" + (2 + 2); // а теперь d тоже "4" String foo = "a string"; String bar = "a string"; // bar будет указывать на тот же объект что и foo String baz = new String("a string"); // Чтобы гарантированно создать новую строку надо вызвать конструктор System.out.println("foo == bar ? " + (foo == bar)); // == сравнивает ссылки на объекты System.out.println("foo равен bar ? " + (foo.equals(bar))); // Метод equals служит для проверки двух объектов на равенство System.out.println("foo == baz ? " + (foo == baz)); System.out.println("foo равен baz ? " + (foo.equals(baz))); > >
Эта программа выведет:
Hello World
foo == bar ? true
foo равен bar ? true
foo == baz ? false
foo равен baz ? true
Обертки [ править ]
Если требуется создать ссылку на один из примитивных типов данных, необходимо использовать соответствующий класс-обертку. Также в таких классах есть некоторые полезные методы и константы, например минимальное значение типа int можно узнать использовав константу Integer.MIN_VALUE. Оборачивание примитива в объект называется упаковкой (boxing), а обратный процесс распаковкой (unboxing).
| Тип | Класс-обертка |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| char | Character |
| float | Float |
| double | Double |
| boolean | Boolean |
int i; Integer boxed; // Обычное создание объекта boxed = new Integer(i); // Фабричный метод boxed = Integer.valueOf(i); // Автоматическая упаковка, компилятор просто вставит вызов Integer.valueOf boxed = i;
Рекомендуется использовать valueOf, он может быть быстрее и использовать меньше памяти потому что применяет кэширование, а конструктор всегда создает новый объект.
Получить примитив из объекта-обертки можно методом Value.
Integer boxed; int i; // Явная распаковка i = boxed.intValue(); // Автоматическая распаковка i = boxed;
Класс String
Класс String поддерживает несколько конструкторов, например:
- String(),
- String(String str),
- String(byte[] asciichar),
- String(char[] unicodechar),
- String(StringBuffer sbuf),
- String(StringBuilder sbuild) и др.
Для нахождения длины строки используется метод length() .
Рассмотрим разные варианты создания строк:
public class StringDemo1 < public static void main(String[] args) < String str1 = new String(); System.out.println("str1:[" + str1 + "]"); char[] chars1 = ; String str2 = new String(chars1); System.out.println("str2:" + str2); char[] chars2 = ; String str3 = new String(chars2, 2, 3); System.out.println("str3:" + str3); String str4 = "abc"; System.out.println("str4:" + str4); System.out.println("str4.length:" + str4.length()); System.out.println("abc.length:" + "abc".length()); String str5 = new String(str4); System.out.println("str5:" + str5); > >
В следующем примере показано, как создавать строки из массива типа byte :
public class StringDemo2 < public static void main(String[] args) < byte[] bytes = ; String s1 = new String(bytes); System.out.println(s1); String s2 = new String(bytes, 2, 3); System.out.println(s2); > >
2. Сравнение строк
Для сравнения строк используются методы equals() и equalsIgnoreCase() , который не учитывает регистр символов:
public class EqualsDemo < public static void main(String[] args) < String s1 = "Hello"; String s2 = "Hello"; String s3 = "Good-bye"; String s4 = "HELLO"; System.out.println(s1 + " equals " + s2 + " ->" + s1.equals(s2)); System.out.println(s1 + " equals " + s3 + " -> " + s1.equals(s3)); System.out.println(s1 + " equals " + s4 + " -> " + s1.equals(s4)); System.out.println(s1 + " equalsIgnoreCase " + s4 + " -> " + s1.equalsIgnoreCase(s4)); > >
В Java существует так называемый String Pool, в котором хранятся созданные строки. При создании очередной строки, JVM сначала ищет такую строку в String Pool. Если такая строка уже есть, то она возвращается вместо создания новой.
String Pool не используется, если строка создается с помощью конструктора. В этом случае гарантированно создается новый объект:
Следующий пример демонстрирует сравнение строк с помощью == и метода equals() :
public class EqualStrings < public static void main(String[] args) < String s1 = "Java"; String s2 = "Java"; String s3 = new String("Java"); String s4 = new String(s1); System.out.println("s1==s2 : " + (s1 == s2)); System.out.println("s3==s4 : " + (s3 == s4)); System.out.println("s1==s3 : " + (s1 == s3)); System.out.println("s1 equals s2 : " + s1.equals(s2)); System.out.println("s1 equals s3 : " + s1.equals(s3)); >>
3. Сравнение подстрок
В классе String реализована группа методов, сравнивающих часть строки с подстрокой:
- Метод regionMatches() используется для сравнения подстроки в исходной строке с подстрокой в строке параметре.
- Метод startsWith() проверяет, начинается ли данная подстрока фрагментом, переданным методу в качестве параметра.
- Метод endsWith() проверяет, совпадает ли с параметром конец строки.
- Метод contains() проверяет, входит ли подстрока в строку.
public class StringDemo5 < public static void main(String[] args) < System.out.println("Foobar".endsWith("bar")); System.out.println("Foobar".startsWith("Foo")); System.out.println("Foobar".contains("oo")); System.out.println("Hello world. ".regionMatches(6, "world", 0, 3)); >>
4. Метод compareTo()
Зачастую бывает недостаточно просто знать, являются ли две строки идентичными. Для приложений, в которых требуется сортировка, нужно знать, какая из двух строк меньше другой. Для ответа на этот вопрос нужно воспользоваться методом compareTo(str) класса String .
Если результат метода меньше нуля — вызывающая строка меньше str . Больше нуля — вызывающая строка больше str . Ноль — две строки эквивалентны.
Следующий пример показывает сортировку строкового массива с помощью пузырька:
public class SortString < private static String[] array = < "Для", "работы", "со", "строками", "в", "языке", "Java", "используются", "классы", "String", "StringBuilder", "StringBuffer" >; public static void main(String[] args) < for (int j = 0; j < array.length; j++) < for (int i = j + 1; i < array.length; i++) < if (array[i].compareTo(array[j]) < 0) < String t = array[j]; array[j] = array[i]; array[i] = t; >> > System.out.println(Arrays.toString(array)); > >
5. Извлечение символов – метод charAt()
Извлечение символов осуществляется с помощью метода charAt() класса String :
public class StringDemo3 < public static void main(String[] args) < char ch = "аbс".charAt(1); System.out.println(ch); >>
6. Поиск подстроки или символа в строке в Java
В класс String включена поддержка поиска определенного символа или подстроки, для этого в нем имеются два метода — indexOf() и lastIndexOf() .
indexOf() — ищет первое вхождение символа или подстроки.
lastlndexOf() — ищет последнее вхождение символа или подстроки.
Каждый из этих методов возвращает индекс того символа, который вы хотели найти, либо индекс начала искомой подстроки. В любом случае, если поиск оказался неудачным, методы возвращают значение -1.
Чтобы найти первое или последнее вхождение символа, применяйте:
int indexOf(char ch) int lastlndexOf(char ch)
Здесь ch символ, который нужно искать. Чтобы найти первое или последнее вхождение подстроки, применяйте:
int indexOf(String str) int lastlndexOf(String str)
Вы можете указать начальную позицию для поиска, воспользовавшись следующими формами:
int indexOf(int ch, int startIndex) int lastlndexOf(int ch, int startIndex) int indexOf(String str, int startIndex) int lastlndexOf(String str, int startIndex)
Рассмотрим применение этих методов на следующем примере:
public class IndexOfDemo < public static void main(String[] args) < String s = "Для работы со строками в языке Java используются " + "классы String, StringBuilder, StringBuffer."; System.out.println(s); System.out.println("indexOf(S) = " + s.indexOf('S')); System.out.println("lastIndexOf(r) = " + s.lastIndexOf('r')); System.out.println("indexOf(String) = " + s.indexOf("String")); System.out.println("lastIndexOf(String) = " + s.lastIndexOf("String")); System.out.println("indexOf(S, 60) = " + s.indexOf('S', 60)); System.out.println("lastIndexOf(S, 70) header7">7. Методы concat(), replace(), toLowerCase(), toUpperCase(), trim() Метод concat() используется для объединения двух строк.
Метод replace() заменяет один символ на другой.
Методы toLowerCase() и toUpperCase() приводят строку к верхнему или нижнему регистру.
public class ModifyStringDemo < public static void main(String[] args) < System.out.println("Hello".concat(" World")); System.out.println("Hello".replace('l', 'w')); System.out.println("Hello".toLowerCase()); System.out.println("Hello".toUpperCase()); System.out.println(" Hello World ".trim()); >>
8. Преобразование данных с помощью valueOf()
Если Вы имеете дело с каким-либо типом данных и хотите вывести значение этого типа в удобочитаемом виде, сначала придется преобразовать это значение в текстовую строку. Для этого существует метод valueOf() .
Такой статический метод определен для любого существующего в Java типа данных. Благодаря этому не составляет труда преобразовать в строку значение любого типа.
static String valueOf(double num) static String valueOf(long num) static String valueOf(Object оb) static String valueOf(char[] chars)
9. Метод substring()
Метод substring() вырезает подстроку из строки, используя указанные позиции. Существует два варианта этого метода. Первый вариант вырезает от указанной позиции и до конца. Второй - от первой позиции до второй. Символ, находящийся в первой позиции, будет включен в результирующую строку. А последний - нет.
public class SubstringDemo < public static void main(String[] args) < System.out.println("Welcome to Kharkiv. ".substring(10)); System.out.println("Welcome to Kharkiv. ".substring(10, 18)); >>
10. Соединение символьных строк
В версию JDK 8 в класс String был внедрен новый метод join(), предназначенный для соединения двух и более символьных строк, разграничиваемых указанным разделителем, например, пробелом или запятой:
public class StringJoinDemo < public static void main(String[] args) < String result = String.join(":", "foobar", "foo", "bar"); System.out.println(result); >>
11. Методы isEmpty(), isBlank()
Метод isEmpty() проверяет пустая ли строка. Возвращает true , только если длина строки равна 0.
Метод isBlank() возвращает true , если строка пуста или содержит только пробелы (Java 11).
public class StringEmpty < public static void main(String[] args) < System.out.println("".isEmpty()); System.out.println(" ".isEmpty()); System.out.println(" ".isBlank()); >>
