Как из строки вытащить числа java
Для извлечения чисел из строки в Java можно использовать регулярные выражения. Для этого можно воспользоваться классом Pattern и Matcher :
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main public static void main(String[] args) String str = "abc123def456ghi789"; Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(str); while (matcher.find()) System.out.println(matcher.group()); > > >
В данном примере мы
- создаем объект Pattern , используя регулярное выражение \d+ , которое означает «один или более цифр»
- создаем объект Matcher , который будет использоваться для поиска соответствий в строке str
- используем метод find() для поиска следующего соответствия, и метод group() для получения найденного числа. Метод find() будет продолжать искать числа, пока они есть в строке.
В результате выполнения кода будут выведены следующие числа:
Извлечь из строки числа
Дана строка, содержащая натуральные числа и слова. Необходимо сформировать список из чисел, содержащихся в этой строке. Например, задана строка «abc83 cde7 1 b 24». На выходе мы должны получить список [83, 7, 1, 24].
Решение задачи на языке программирования Python
Следует посимвольно перебирать строку. Если очередной символ цифра, надо добавить ее в новую строку. Далее проверять символы за ней, и если они тоже цифры, то добавлять их в конец этой новой подстроки из цифр. Когда очередной символ окажется не цифрой, или будет достигнут конец строки, то надо преобразовать строку из цифр в число и добавить в список.
s = input() length = len(s) integers = [] i = 0 # индекс текущего символа while i length: s_int = '' # строка для нового числа while i length and '0' s[i] '9': s_int += s[i] i += 1 i += 1 if s_int != '': integers.append(int(s_int)) print(integers)
5 dkfj78df 9 8 dkfj8 [5, 78, 9, 8, 8]
Обратите внимание, что данное решение извлекает именно числа, а не цифры. Иначе мы бы не получили число 78, а получили отдельно цифру 7 и цифру 8. Задача на извлечение цифр существенно проще.
Решение через цикл for:
a = input() num_list = [] num = '' for char in a: if char.isdigit(): num = num + char else: if num != '': num_list.append(int(num)) num = '' if num != '': num_list.append(int(num)) print(num_list)
Если в строке числа всегда отделены от слов пробелами, задача решается проще:
s = input() word_list = s.split() num_list = [] for word in word_list: if word.isnumeric(): num_list.append(int(word)) print(num_list)
Здесь происходит разделение строки на слова по пробелам. В цикле с помощью метода isnumeric каждое слово проверяется, является ли оно числом. Подобную задачу можно решить в одну строку, если использовать функцию filter .
s = input() word_list = s.split() num_list = [int(num) for num in filter( lambda num: num.isnumeric(), word_list)] print(num_list)
В функцию filter передается лямбда-выражение, проверяющее слова, и список слов. Функция возвращает список строк-чисел. Далее с помощью генератора списка строки преобразовываются в целочисленный тип.
На практике при решении подобных задач, когда надо найти и извлечь из строки что-либо, обычно пользуются регулярными выражениями. В примере ниже не обязательно, чтобы число было отделено пробелами.
import re s = input() nums = re.findall(r'\d+', s) nums = [int(i) for i in nums] print(nums)
Для поиска вещественных чисел:
import re s = input() nums = re.findall(r'\d*\.\d+|\d+', s) nums = [float(i) for i in nums] print(nums)
X Скрыть Наверх
Решение задач на Python
Как вытащить число из строки
Как вытащить из строки сгруппированные данные?
Сервер отправляет данные игроков по сети в виде строки, в которой зашифрованы разные данные, и все.
Как вытащить из строки текстовую часть?
Помогите! Есть строка в Textbox, из нее нужно вытащить текст и вывести в другой текстбокс! Помогите.
Как вытащить ещё часть строки
Всем привет! Есть такой код: string str = ((IEnumerable<string>).
Регулярное выражение: как вытащить n из row[n], где n-целое число
Здравствуйте, как вытащить n из row, где n-целое число
Регистрация: 10.03.2011
Сообщений: 354
Посимвольно просмотреть строку.. и есть определять является ли символ цифрой если да то сохранять..
а потом когда мы отсеяли буквы и осталось число то конвертировать. с помощью
Convert.ToInt32("тут строка содержащая только цифры")
и получим интовое число
6277 / 3562 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
using System; using System.Linq; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { string[] str = { "fdsg123", "234 fgds*s**d*", "SsTyd %377" }; foreach (string s in str) { int[] matches = Regex.Matches(s, "\\d+") .CastMatch>() .Select(x => int.Parse(x.Value)) .ToArray(); foreach (int match in matches) Console.WriteLine(match); } } }
На этом мои знания Regex закончились
4090 / 3824 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
int r = Convert.ToInt32( Regex.Replace(s, @"[^\d]+", "") );
Вот как бы я решил, правда без регулярных выражений(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
string[] str = { "gmf41", "df3g1", "98g5gg4g" }; string str1; string str2 = ""; int number; foreach(string x in str) { str1 = x; char[] mas= str1.ToCharArray(); foreach (char h in mas) { if (char.IsDigit(h) == true) { str2 += h; } } } number = Convert.ToInt32(str2); Console.WriteLine(number); Console.ReadLine();
340 / 340 / 90
Регистрация: 04.03.2010
Сообщений: 648
1 2 3 4 5 6 7 8 9 10 11 12 13 14
class Program { static void Main(string[] args) { string[] str = { "fdsg123", "234 fgds*s**d*", "SsTyd %377" }; foreach (string st in str) { int[] intMatch = st.Where(Char.IsDigit).Select(x => int.Parse(x.ToString())).ToArray(); Console.WriteLine(string.Join(" ", intMatch)); } Console.ReadKey(); } }
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
ТС-у было бы полезно указать, возможен ли такой вариант «123fdsg567» и как в этом случае следует выполнять разбор.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Как вытащить некоторые строки в отдельные переменные
string a = "c:\test.txt to D:\tmp.txt" как вытыщить в отдельные переменные c:\test.txt и D:\tmp.txt
Как вытащить число или буквы из строки где буквы с цифрами
Столкнулся с такой особенностью. Не могу понять в чём дело, может просто недопонимают синтаксиса.
Вытащить число из строки
Здравствуйте. Как перевести несколько символов char в int? Например, мне надо перевести набор.
как вытащить число
Проблема у меня получилась потому, что непросто вытащить, но и преобразовать есть А, нужно- В.
Как на языке Си вытащить из строки число
Или иначе.
Есть куча функций (http://www.cplusplus.com/reference/clibrary/cstring/strpbrk/) по поиску первого вхождения символа в строку, но как потом стандартными функциями начать считывание начиная С этого символа Я такой функции не нашёл.
Подскажите, уже времени кучу потерял.
Дополнен 11 лет назад
atoi не то
у меня там не только числа
Лучший ответ
Почитайте работу с указателями.
Как пример что касается строк:
#include
#include
int main ()
<
char str[] = «This is a sample string»;
char *pFind =strchr(str,’i’); //Находим первое ‘i’ в строке, получаем указатель на него
if (pFind) < //Если нашли
pFind++; //Сдвигаем указатель на следующий символ после ‘i’
pFind = strchr(pFind, ‘i’); //Ищем следующее ‘i’ (уже начиная с символа после ‘i’)
>
return 0;
>
Что касается вытащить число — чуть подробнее — надо вытащить любой символ из ‘0’-‘9’ из строки или преобразовать из строки в число?
если первое есть функция isdigit.
скажем так
Считает кол-во символов-чисел в строке
#include //Для isdigit
int main() <
char str = «str12str34»;
char *pFind = &str;
int intCount = 0;
while(*pFind!=’\0′) < //Пока не конец строки (не найден нуль терминатор)
if (isdigit(*pFind)) intCount++; //Если текущий символ число — увеличиваем счетчик
pFind++; //Сдвигаем указатель на следующий символ
>
return 0;
>
Если строку в число
Функция atoi
int intI = atoi(«1234»);