Перейти к содержимому

Как из строки вытащить число java

  • автор:

Операции со строками и подстроками в Java

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

Соединение строк в Java

Чтобы соединить строки в Java, подойдёт операция сложения «+» :

 
String str1 = "Java"; String str2 = "Hi"; String str3 = str1 + " " + str2; System.out.println(str3); // Hi Java 

Если же в предстоящей операции сложения строк будет применяться нестроковый объект, допустим, число, данный объект преобразуется к строке:

 
String str3 = "Год " + 2020; 

По факту, когда мы складываем строки с нестроковыми объектами, вызывается метод valueOf() класса String. Этот метод преобразует к строке почти все типы данных. Чтобы преобразовать объекты разных классов, valueOf вызывает метод toString() данных классов.

Объединять строки можно и с помощью concat() :

 
String str1 = "Java"; String str2 = "Hi"; str2 = str2.concat(str1); // HiJava 

Метод принимает строку, с которой нужно объединить вызывающую строку, возвращая нам уже соединённую строку.

Также мы можем использовать метод join() , позволяющий объединять строки с учетом разделителя. Допустим, две строки выше слились в слово "HiJava", однако мы бы хотели разделить подстроки пробелом. Тут и пригодится join() :

 
String str1 = "Java"; String str2 = "Hi"; String str3 = String.join(" ", str2, str1); // Hi Java 

Метод join — статический. Первый параметр — это разделитель, который будет использоваться для разделения подстрок в общей строке. Последующие параметры осуществляют передачу через запятую произвольного набора объединяемых подстрок — в нашем случае их две, но можно и больше.

Извлекаем символы и подстроки в Java

Чтобы извлечь символы по индексу, в классе String есть метод char charAt(int index) . Этот метод принимает индекс, по которому необходимо получить символы, возвращая извлеченный символ:

 
String str = "Java"; char c = str.charAt(2); System.out.println(c); // v 

Обратите внимание, что индексация начинается с нуля, впрочем, как и в массивах. Если же нужно извлечь сразу группу символов либо подстроку, подойдёт getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) . Этот метод принимает ряд параметров: • srcBegin: индекс в нашей строке, с которого осуществляется начало извлечения символов; • srcEnd: индекс в нашей строке, до которого осуществляется извлечение символов; • dst: массив символов (именно в него будут эти символы извлекаться); • dstBegin: индекс в массиве dst (с него надо добавлять символы, извлечённые из строки).

 
String str = "Hi world!"; int start = 6; int end = 11; char[] dst=new char[end - start]; str.getChars(start, end, dst, 0); System.out.println(dst); // world 

Сравниваем строки в Java

Мы уже писали о том, как сравнивать строки в Java, используя для этого метод equals() (регистр учитывается) и equalsIgnoreCase() (регистр не учитывается). Хотелось бы сказать пару слов про ещё одну пару методов: int compareTo(String str) и int compareToIgnoreCase(String str) — они позволяют не только сравнить 2 строки, но и узнать, больше ли одна другой. Если значение, которое возвращается, больше 0, первая строка больше, если меньше нуля, всё наоборот. Когда обе строки равны, вернётся ноль.

Для определения используется лексикографический порядок. Допустим, строка "A" меньше строки "B", ведь символ 'A' в алфавите находится перед символом 'B'. Когда первые символы строк равны, в расчёт берутся следующие символы. К примеру:

 
String str1 = "hello"; String str2 = "world"; String str3 = "hell"; System.out.println(str1.compareTo(str2)); // -15 - str1 меньше, чем strt2 System.out.println(str1.compareTo(str3)); // 1 - str1 больше, чем str3 

Поиск в строке в Java

Чтобы найти индекс первого вхождения подстроки в строку, используют метод indexOf() , последнего — метод lastIndexOf() . Если подстрока не найдена, оба метода вернут -1:

 
String str = "Hello world"; int index1 = str.indexOf('l'); // 2 int index2 = str.indexOf("wo"); //6 int index3 = str.lastIndexOf('l'); //9 

Чтобы определить, начинается строка с определённой подстроки, применяют метод startsWith() . Что касается метода endsWith() , то он даёт возможность определить оканчивается ли строка на определенную подстроку:

 
String str = "myfile.exe"; boolean start = str.startsWith("my"); //true boolean end = str.endsWith("exe"); //true 

Выполняем замену в строке в Java

Заменить в нашей строке одну последовательность символов другой можно с помощью метода replace() :

 
String str = "Hello world"; String replStr1 = str.replace('l', 'd'); // Heddo wordd String replStr2 = str.replace("Hello", "Bye"); // Bye world 

Обрезаем строки в Java

Для удаления начальных и конечных пробелов применяют метод trim() :

 
String str = " hello world "; str = str.trim(); // hello world 

Также существует метод substring() — он возвращает подстроку, делая это с какого-нибудь конкретного индекса до конца либо до определённого индекса:

 
String str = "Hello world"; String substr1 = str.substring(6); // world String substr2 = str.substring(3,5); //lo 

Меняем регистр в Java

При необходимости вы можете перевести все символы вашей строки в нижний регистр ( toLowerCase() ) или в верхний ( toUpperCase() ):

 
String str = "Hello World"; System.out.println(str.toLowerCase()); // hello world System.out.println(str.toUpperCase()); // HELLO WORLD 

Split

С помощью этого метода вы сможете разбить строку на подстроки по конкретному разделителю. Под разделителем понимается какой-либо символ либо набор символов, передаваемые в метод в качестве параметра. Давайте для примера разобьём небольшой текст на отдельные слова:

 
String text = "OTUS is a good company"; String[] words = text.split(" "); for(String word : words) System.out.println(word); > 

В нашем случае строка разделится по пробелу, и мы получим следующий консольный вывод:

 
OTUS is a good company

Вот и всё! Узнать больше всегда можно на наших курсах:

Извлечь цифры из строки

Помогите! Необходимо выбрать (в виде списка) из текста все числа. Нужно сделать при помощи цикла без использования регулярных выражений.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

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

Как извлечь только цифры из строки
Есть файл и в нем строки вида 00:00:00,000 --> 00:00:00,200 Нужно извлечь только цифры из каждой.

Извлечь цифры из текстовой строки и просуммировать
Нужно с этой строчки 1-(1X); 2-(1); 3-(X2); 4-(1X); 5-(1X); 6-(1X); 7-(1); 8-(1); 9-(2); 10-(1);.

Извлечь цифры из строки. Регулярные выражения
Друзья, мучаюсь уже несколько часов со следующей задачей Пытаюсь извлечь из строки только цифры. .

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

16120 / 9755 / 2731
Регистрация: 21.10.2017
Сообщений: 21,624

ЦитатаСообщение от Alexandra1234A Посмотреть сообщение

без использования регулярных выражений

Ну я так не играю

Добавлено через 1 минуту
Alexandra1234A, давай еще пару раз тему создай, чтоб наверняка
Цифры в строке

706 / 385 / 64
Регистрация: 22.12.2013
Сообщений: 2,220
Записей в блоге: 19

ЦитатаСообщение от Alexandra1234A Посмотреть сообщение

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

Character.isDigit (ch)

Добавлено через 15 минут
PS. На самом деле масса вариантов.

Вы можете поискать рекомендации или тестировать сами по быстродействию.
К примеру использовать Google Guava:

CharMatcher.DIGIT.retainFrom("123-456-789");

Но регулярка может оказаться быстрее. Сам не проверял.
Регистрация: 10.10.2020
Сообщений: 28
Уже нашел решение, но спасибо.Использовал character.isdigit
706 / 385 / 64
Регистрация: 22.12.2013
Сообщений: 2,220
Записей в блоге: 19

Лучший ответ

Сообщение было отмечено Alexandra1234A как решение

Решение

Еще вам вариант:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
import java.nio.CharBuffer; public class Main { public static void main(String[] args) { String str1 = "90090 - hjk- sds"; String str2 = strNonDigits(str1); System.out.print(str2); } public static String strNonDigits(CharSequence in) { if (in == null) return null; if (in.length() == 0) return ""; char[] result = new char[in.length()]; int cursor = 0; CharBuffer buffer = CharBuffer.wrap(in); while (buffer.hasRemaining()) { char chr = buffer.get(); if (chr > 47 && chr  58) result[cursor++] = chr; } return new String(result, 0, cursor); } }

Добавлено через 7 минут
PS.
Кликните здесь для просмотра всего текста

A char buffer.
This class defines four categories of operations upon char buffers:
Absolute and relative get and put methods that read and write single chars;
Relative bulk get methods that transfer contiguous sequences of chars from this buffer into an array; and
Relative bulk put methods that transfer contiguous sequences of chars from a char array, a string, or some other char buffer into this buffer; and
A method for compacting a char buffer.
Char buffers can be created either by allocation, which allocates space for the buffer's content, by wrapping an existing char array or string into a buffer, or by creating a view of an existing byte buffer.
Like a byte buffer, a char buffer is either direct or non-direct. A char buffer created via the wrap methods of this class will be non-direct. A char buffer created as a view of a byte buffer will be direct if, and only if, the byte buffer itself is direct. Whether or not a char buffer is direct may be determined by invoking the isDirect method.
This class implements the CharSequence interface so that character buffers may be used wherever character sequences are accepted, for example in the regular-expression package java.util.regex.
Methods in this class that do not otherwise have a value to return are specified to return the buffer upon which they are invoked. This allows method invocations to be chained. The sequence of statements

Как извлечь числа из строки Java? [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 5 лет назад .

Есть строка

46 55 66 95 

Нужно ёё переоразовать в масив. P.S. Числа могут быть любой длинны!

Выделить числа из строки и найти их сумму в java?

есть строка, например, "Вася заработал 5000 рублей, Петя - 7563 рубля, а Маша - 30000". Вывод должен дать сумму всех чисел в строке. Я извлекла числа из строки, но не понимаю как их сложить. Регулярные выражения использовать нельзя

String str = text.trim(); String digits=""; for (int i = 0; i < str.length(); i++) < char chrs = str.charAt(i); if (Character.isDigit(chrs)) digits = digits+chrs; >System.out.println(digits);

Выводит 5000756330000. Как вывести 42563?

  • Вопрос задан более двух лет назад
  • 5859 просмотров

Комментировать

Решения вопроса 0

Ответы на вопрос 5

Денис Загаевский @zagayevskiy Куратор тега Java

Android developer at Yandex

Раз регулярные выражения использовать нельзя, пиши конечный автомат. Там будет всего пара состояний(читаем число(D), читаем не число(C)) и переходы между ними.
Вначале находится в состоянии С.
Находясь в состоянии С, видим цифру - переходим в состояние D, и пишем цифру в буфер, переходим на следующий символ. Находясь в состоянии С и видя не-цифру, остаёмся в С и переходим на следующий символ.
Находясь в состоянии D и видя цифру - остаёмся в D и дописываем цифру в буфер. Находясь в состоянии D и видя не-цифру, переходим в состояние C, буфер прибавляем к сумме, буфер очищаем.
Буфер может быть сразу числом, тогда добавление в него значит buffer = buffer*10+d, а очищение - присваивание нуля.

Ответ написан более двух лет назад

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *