Как найти целое число в строке

есть string строка, например

string str ="ddadsadwd 1337 dsdggf";

нужно найти в ней число и выписать в переменную int

задан 20 ноя 2016 в 14:07

topl3niy's user avatar

5

Имеется несколько способов решения поставленной задачи. Один из прямолинейных способов может выглядеть следующим образом

#include <iostream>
#include <algorithm>
#include <cctype>
#include <cstdlib>

int main() 
{
    std::string str ="ddadsadwd 1337 dsdggf";
    int n = 0;

    auto it = std::find_if( str.begin(), str.end(), isdigit );

    if ( it != str.end() ) n = std::atoi( str.c_str() + ( it - str.begin() ) );

    std::cout << n << std::endl;

    return 0;
}

Вывод программы на консоль

1337

При этом предполагается, что число в строке не содержит знак. Иначе вам придется использовать другой предикат в алгоритме std::find_if, который также будет делать проверку на знак числа.

ответ дан 20 ноя 2016 в 14:28

Vlad from Moscow's user avatar

Vlad from MoscowVlad from Moscow

44.7k3 золотых знака37 серебряных знаков89 бронзовых знаков

5

#include <iostream>
#include <string>
#include <cstdlib>

int main(void)
{
    std::string s ="ddadsadwd 1337 dsdggf";
    size_t digits = s.find_first_of( "1234567890+-" );
    if( digits <= s.size() ) {
        std::cout << "Number found: " << atoi( s.c_str() + digits ) << std::endl;
    }
    else {
        std::cout << "Number is not found" << std::endl;
    }
    return 0;
}

ответ дан 20 ноя 2016 в 17:16

PinkTux's user avatar

PinkTuxPinkTux

9,05613 серебряных знаков26 бронзовых знаков

Вариант с regex:

#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() {
    string s = "ddadsadwd 1337 dsdggf";
    regex p("\d+");
    regex_token_iterator<string::iterator> numbers( s.begin(), s.end(), p );
    string t = *numbers;
    int first_number = atoi( t.c_str() );
    cout << first_number << endl;
    return 0;
}

P.S. Почему не работает (*numbers).c_str()?

ответ дан 20 ноя 2016 в 15:41

pank's user avatar

pankpank

2,5481 золотой знак14 серебряных знаков30 бронзовых знаков

I have a requirement to find and extract a number contained within a string.

For example, from these strings:

string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"

How can I do this?

David Sopko's user avatar

David Sopko

5,1032 gold badges38 silver badges41 bronze badges

asked Jan 19, 2011 at 10:24

van's user avatar

7

d+ is the regex for an integer number. So

//System.Text.RegularExpressions.Regex
resultString = Regex.Match(subjectString, @"d+").Value;

returns a string containing the first occurrence of a number in subjectString.

Int32.Parse(resultString) will then give you the number.

Mehdi Dehghani's user avatar

answered Jan 19, 2011 at 10:29

Tim Pietzcker's user avatar

Tim PietzckerTim Pietzcker

326k58 gold badges499 silver badges558 bronze badges

16

Here’s how I cleanse phone numbers to get the digits only:

string numericPhone = new String(phone.Where(Char.IsDigit).ToArray());

answered Mar 27, 2013 at 21:07

Dave's user avatar

DaveDave

3,2631 gold badge17 silver badges15 bronze badges

3

go through the string and use Char.IsDigit

string a = "str123";
string b = string.Empty;
int val;

for (int i=0; i< a.Length; i++)
{
    if (Char.IsDigit(a[i]))
        b += a[i];
}

if (b.Length>0)
    val = int.Parse(b);

Danny Beckett's user avatar

Danny Beckett

20.3k24 gold badges106 silver badges134 bronze badges

answered Jan 19, 2011 at 10:27

Sasha Reminnyi's user avatar

Sasha ReminnyiSasha Reminnyi

3,4222 gold badges23 silver badges27 bronze badges

6

use regular expression …

Regex re = new Regex(@"d+");
Match m = re.Match("test 66");

if (m.Success)
{
    Console.WriteLine(string.Format("RegEx found " + m.Value + " at position " + m.Index.ToString()));
}
else
{
    Console.WriteLine("You didn't enter a string containing a number!");
}

answered Jan 19, 2011 at 10:27

Pranay Rana's user avatar

Pranay RanaPranay Rana

174k35 gold badges237 silver badges263 bronze badges

0

What I use to get Phone Numbers without any punctuation…

var phone = "(787) 763-6511";

string.Join("", phone.ToCharArray().Where(Char.IsDigit));

// result: 7877636511

answered Jan 16, 2015 at 14:55

ejcortes's user avatar

ejcortesejcortes

6097 silver badges13 bronze badges

0

Regex.Split can extract numbers from strings. You get all the numbers that are found in a string.

string input = "There are 4 numbers in this string: 40, 30, and 10.";
// Split on one or more non-digit characters.
string[] numbers = Regex.Split(input, @"D+");
foreach (string value in numbers)
{
    if (!string.IsNullOrEmpty(value))
    {
    int i = int.Parse(value);
    Console.WriteLine("Number: {0}", i);
    }
}

Output:

Number: 4
Number: 40
Number: 30
Number: 10

answered Oct 15, 2013 at 20:11

Tabares's user avatar

TabaresTabares

4,0435 gold badges40 silver badges46 bronze badges

1

if the number has a decimal points, you can use below

using System;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here
            Console.WriteLine(Regex.Match("anything 876.8 anything", @"d+.*d*").Value);
            Console.WriteLine(Regex.Match("anything 876 anything", @"d+.*d*").Value);
            Console.WriteLine(Regex.Match("$876435", @"d+.*d*").Value);
            Console.WriteLine(Regex.Match("$876.435", @"d+.*d*").Value);
        }
    }
}

results :

«anything 876.8 anything» ==> 876.8

«anything 876 anything» ==> 876

«$876435» ==> 876435

«$876.435» ==> 876.435

Sample : https://dotnetfiddle.net/IrtqVt

Community's user avatar

answered Aug 30, 2019 at 14:05

Tarek El-Mallah's user avatar

Tarek El-MallahTarek El-Mallah

3,9801 gold badge31 silver badges46 bronze badges

2

Here’s a Linq version:

string s = "123iuow45ss";
var getNumbers = (from t in s
                  where char.IsDigit(t)
                  select t).ToArray();
Console.WriteLine(new string(getNumbers));

Danny Beckett's user avatar

Danny Beckett

20.3k24 gold badges106 silver badges134 bronze badges

answered Jan 13, 2013 at 1:25

spajce's user avatar

spajcespajce

7,0165 gold badges29 silver badges44 bronze badges

2

Another simple solution using Regex
You should need to use this

using System.Text.RegularExpressions;

and the code is

string var = "Hello3453232wor705Ld";
string mystr = Regex.Replace(var, @"d", "");
string mynumber = Regex.Replace(var, @"D", "");
Console.WriteLine(mystr);
Console.WriteLine(mynumber);

answered Jan 18, 2014 at 11:03

1

You can also try this

string.Join(null,System.Text.RegularExpressions.Regex.Split(expr, "[^\d]"));

answered Jan 19, 2011 at 10:27

BvdVen's user avatar

BvdVenBvdVen

2,90123 silver badges33 bronze badges

1

Here is another Linq approach which extracts the first number out of a string.

string input = "123 foo 456";
int result = 0;
bool success = int.TryParse(new string(input
                     .SkipWhile(x => !char.IsDigit(x))
                     .TakeWhile(x => char.IsDigit(x))
                     .ToArray()), out result);

Examples:

string input = "123 foo 456"; // 123
string input = "foo 456";     // 456
string input = "123 foo";     // 123

answered Sep 28, 2016 at 6:35

fubo's user avatar

fubofubo

44.6k17 gold badges102 silver badges136 bronze badges

Just use a RegEx to match the string, then convert:

Match match = Regex.Match(test , @"(d+)");
if (match.Success) {
   return int.Parse(match.Groups[1].Value);
}

answered Jan 19, 2011 at 10:29

Daniel Gehriger's user avatar

Daniel GehrigerDaniel Gehriger

7,3192 gold badges33 silver badges55 bronze badges

 string input = "Hello 20, I am 30 and he is 40";
 var numbers = Regex.Matches(input, @"d+").OfType<Match>().Select(m => int.Parse(m.Value)).ToArray();

answered Aug 18, 2017 at 18:08

Ramireddy Ambati's user avatar

1

You can do this using String property like below:

 return new String(input.Where(Char.IsDigit).ToArray()); 

which gives only number from string.

Rahul Hendawe's user avatar

answered Dec 15, 2016 at 17:31

Shyam sundar shah's user avatar

For those who want decimal number from a string with Regex in TWO line:

decimal result = 0;
decimal.TryParse(Regex.Match(s, @"d+").Value, out result);

Same thing applys to float, long, etc…

answered Oct 5, 2016 at 3:19

Richard Fu's user avatar

Richard FuRichard Fu

5968 silver badges27 bronze badges

Here is another simple solution using Linq which extracts only the numeric values from a string.

var numbers = string.Concat(stringInput.Where(char.IsNumber));

Example:

var numbers = string.Concat("(787) 763-6511".Where(char.IsNumber));

Gives: «7877636511»

answered Apr 11, 2022 at 14:08

Bloggrammer's user avatar

BloggrammerBloggrammer

8368 silver badges20 bronze badges

var match=Regex.Match(@"a99b",@"d+");
if(match.Success)
{
    int val;
    if(int.TryParse(match.Value,out val))
    {
        //val is set
    }
}

answered Jan 19, 2011 at 10:29

spender's user avatar

spenderspender

117k33 gold badges227 silver badges346 bronze badges

The question doesn’t explicitly state that you just want the characters 0 to 9 but it wouldn’t be a stretch to believe that is true from your example set and comments. So here is the code that does that.

        string digitsOnly = String.Empty;
        foreach (char c in s)
        {
            // Do not use IsDigit as it will include more than the characters 0 through to 9
            if (c >= '0' && c <= '9') digitsOnly += c;
        }

Why you don’t want to use Char.IsDigit() — Numbers include characters such as fractions, subscripts, superscripts, Roman numerals, currency numerators, encircled numbers, and script-specific digits.

answered Jan 18, 2015 at 18:26

Atters's user avatar

AttersAtters

8018 silver badges19 bronze badges

var outputString = String.Join("", inputString.Where(Char.IsDigit));

Get all numbers in the string.
So if you use for examaple ‘1 plus 2′ it will get ’12’.

answered Sep 16, 2015 at 14:21

Tom's user avatar

TomTom

1391 silver badge14 bronze badges

Extension method to get all positive numbers contained in a string:

    public static List<long> Numbers(this string str)
    {
        var nums = new List<long>();
        var start = -1;
        for (int i = 0; i < str.Length; i++)
        {
            if (start < 0 && Char.IsDigit(str[i]))
            {
                start = i;
            }
            else if (start >= 0 && !Char.IsDigit(str[i]))
            {
                nums.Add(long.Parse(str.Substring(start, i - start)));
                start = -1;
            }
        }
        if (start >= 0)
            nums.Add(long.Parse(str.Substring(start, str.Length - start)));
        return nums;
    }

If you want negative numbers as well simply modify this code to handle the minus sign (-)

Given this input:

"I was born in 1989, 27 years ago from now (2016)"

The resulting numbers list will be:

[1989, 27, 2016]

answered May 24, 2016 at 19:08

Thomas C. G. de Vilhena's user avatar

An interesting approach is provided here by Ahmad Mageed, uses Regex and StringBuilder to extract the integers in the order in which they appear in the string.

An example using Regex.Split based on the post by Ahmad Mageed is as follows:

var dateText = "MARCH-14-Tue";
string splitPattern = @"[^d]";
string[] result = Regex.Split(dateText, splitPattern);
var finalresult = string.Join("", result.Where(e => !String.IsNullOrEmpty(e)));
int DayDateInt = 0;

int.TryParse(finalresult, out DayDateInt);

d219's user avatar

d219

2,6895 gold badges31 silver badges36 bronze badges

answered May 2, 2018 at 19:53

Simba's user avatar

SimbaSimba

4795 silver badges7 bronze badges

I have used this one-liner to pull all numbers from any string.

var phoneNumber = "(555)123-4567";
var numsOnly = string.Join("", new Regex("[0-9]").Matches(phoneNumber)); // 5551234567

answered Mar 20, 2021 at 2:30

Reed's user avatar

ReedReed

1,4851 gold badge21 silver badges37 bronze badges

3

  string verificationCode ="dmdsnjds5344gfgk65585";
            string code = "";
            Regex r1 = new Regex("\d+");
          Match m1 = r1.Match(verificationCode);
           while (m1.Success)
            {
                code += m1.Value;
                m1 = m1.NextMatch();
            }

answered Feb 27, 2013 at 5:56

Manoj Gupta's user avatar

2

Did the reverse of one of the answers to this question:
How to remove numbers from string using Regex.Replace?

// Pull out only the numbers from the string using LINQ

var numbersFromString = new String(input.Where(x => x >= '0' && x <= '9').ToArray());

var numericVal = Int32.Parse(numbersFromString);

Community's user avatar

answered Jan 11, 2013 at 18:05

mwilly's user avatar

0

Here is my Algorithm

    //Fast, C Language friendly
    public static int GetNumber(string Text)
    {
        int val = 0;
        for(int i = 0; i < Text.Length; i++)
        {
            char c = Text[i];
            if (c >= '0' && c <= '9')
            {
                val *= 10;
                //(ASCII code reference)
                val += c - 48;
            }
        }
        return val;
    }

answered Oct 11, 2018 at 9:25

HS_Kernel's user avatar

static string GetdigitFromString(string str)
    {
        char[] refArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        char[] inputArray = str.ToCharArray();
        string ext = string.Empty;
        foreach (char item in inputArray)
        {
            if (refArray.Contains(item))
            {
                ext += item.ToString();
            }
        }
        return ext;
    }

answered Jan 13, 2013 at 0:43

Ruby Beginner's user avatar

1

here is my solution

string var = "Hello345wor705Ld";
string alpha = string.Empty;
string numer = string.Empty;
foreach (char str in var)
{
    if (char.IsDigit(str))
        numer += str.ToString();
    else
        alpha += str.ToString();
}
Console.WriteLine("String is: " + alpha);
Console.WriteLine("Numeric character is: " + numer);
Console.Read();

answered Jan 18, 2014 at 10:39

You will have to use Regex as d+

d matches digits in the given string.

answered Jan 19, 2011 at 10:28

Sachin Shanbhag's user avatar

Sachin ShanbhagSachin Shanbhag

54.1k11 gold badges88 silver badges103 bronze badges

string s = "kg g L000145.50rn";
        char theCharacter = '.';
        var getNumbers = (from t in s
                          where char.IsDigit(t) || t.Equals(theCharacter)
                          select t).ToArray();
        var _str = string.Empty;
        foreach (var item in getNumbers)
        {
            _str += item.ToString();
        }
        double _dou = Convert.ToDouble(_str);
        MessageBox.Show(_dou.ToString("#,##0.00"));

answered Jan 19, 2016 at 7:25

watcharachai unvijit's user avatar

Using @tim-pietzcker answer from above, the following will work for PowerShell.

PS C:> $str = '1 test'
PS C:> [regex]::match($str,'d+').value
1

answered Feb 19, 2019 at 20:45

user2320464's user avatar

user2320464user2320464

3611 gold badge5 silver badges11 bronze badges

найти целые числа из строки

Я
   tg30000

10.05.12 — 12:46

Подскажите что-то запутался..

Имеется строка, в ней нужно найти целые числа..

Процедура ПриНачалеРаботыСистемы()

   
   Предупреждение( КоличествоЦелыхЧиселВСтроке() );

   
КонецПроцедуры

Функция КоличествоЦелыхЧиселВСтроке()

   
   СтрокаПоиска =»6f07 only 8after 74 75 310а»;

   КоличествоСимволовСтроки = СтрДлина(СтрокаПоиска);

   Для  Счетчик=1 По КоличествоСимволовСтроки Цикл

       ВыбираемыйСимвол=Сред(СтрокаПоиска,Счетчик,1);

       
       КодСимвола = КодСимвола(ВыбираемыйСимвол);

               
       Сообщить(ВыбираемыйСимвол);

       
           КонецЦикла;

   
КонецФункции

   Ненавижу 1С

1 — 10.05.12 — 12:47

я нашел такие: 6 0 7 8 7 4 7 5 3 1 0 — всего 11 чисел

   tg30000

2 — 10.05.12 — 12:49

(1) не пойму как проверит посимвольно из строки является символ числом или нет, вот в чем вопрос.

   Ненавижу 1С

3 — 10.05.12 — 12:50

Если Найти(«0123456789»,Символ)>0 Тогда

   Wobland

4 — 10.05.12 — 12:50

(2) КодСимвола() МЕЖДУ НеПомнюЧем

   ZanderZ

5 — 10.05.12 — 12:51

ну или так :)

Попытка

  ч = Число(ВыбираемыйСимвол);

Исключение

КонецПопытки;

   vmv

6 — 10.05.12 — 12:52

«ИзСтрокиТолькоЦифры» типовые > глобальный поиск

не нада писать г-код, придерживайтесь стандартов, какими бы кривыми они не казались

   vmv

7 — 10.05.12 — 12:53

(5) рассрелять бы тебя)

   Dmitry77

8 — 10.05.12 — 12:53

прикол в том, что 310 тоже целое число в (1), и цифры из которых он состоит — тоже целые числа,

я бы тупо перебрал все подстроки — каждую из них форматировал в число через попытка — исключение, а потом из них отобрал бы целые

   tg30000

9 — 10.05.12 — 12:53

(3) (4) (5) (6)Спасибо большое , разобрался теперь

   Ненавижу 1С

10 — 10.05.12 — 12:54

(8) я в курсе, но он же не пишет точную постановку

   Маркетолог

11 — 10.05.12 — 12:54

А 75 считается за целое число ?

   tg30000

12 — 10.05.12 — 12:55

На вход подается

произвольная строка, фуннкция должна вернуть количество целых чисел в ней

Целое число – последовательность символов, содержащая только цифры (отрицательные

числа учитывать не требуется). При этом числа должны разделяться пробелами.

Например, строки «10.5» и «число15» не содержат целых чисел.

   Wobland

13 — 10.05.12 — 12:55

а ещё можно СтрЗаменить все нецифры на пробелы, разложить в многострочную строку, поудалять оттуда пустые строки…

   tg30000

14 — 10.05.12 — 12:56

Стараюсь сделать по следующему принципу, пока не получается…

В этой задаче можно использовать два вложенных цикла. В первом последовательно перебирать символы строки и сравнивать их с числом. Для сравнения символа с числом можно воспользоваться функцией КодСимвола(). После того как получили первое число и если слева есть пробел запускать второй цикл, в котором последовательно проверять следующие символы и смотреть являются ли они числом. Если найденные символы числа и справа есть пробел, то найдено целое число. Счетчик чисел увеличить на 1.

   Dmitry77

15 — 10.05.12 — 12:56

(12) исходя из этой постановки решение телепаты не угадали.

   Wobland

16 — 10.05.12 — 12:56

(12) раскладывай в массив через пробелы, потом попыткой со счётчиком. просто.

   Wobland

17 — 10.05.12 — 12:57

+(16) и ещё: Если Цел(а)=а Тогда ЯвляетсяЦелым

   tg30000

18 — 10.05.12 — 12:58

Ок! Всем Спасибо за посильную помощь)

   tg30000

19 — 10.05.12 — 13:09

Что-то не пойму если писать

ВыбираемыйСимвол=Сред(СтрокаПоиска,Счетчик,1);

то ВыбираемыйСимвол является строкой? как сделать проверку типа , число это или нет?

Если Тип(«Число»)=ТипЗнч(ВыбираемыйСимвол) Тогда — не правильно же?

   ZanderZ

20 — 10.05.12 — 13:13

(19) в (9) за что спасибо то сказал ?:)

   tg30000

21 — 10.05.12 — 13:14

(20) ну все при работе выявляется ,начал просто сейчас делать, появились вопросы.

   ZanderZ

22 — 10.05.12 — 13:16

(21) самое простое в (3) используй пока это

   СвинТуз

23 — 10.05.12 — 13:17

строка=»6f07 only 8after 74 75 310а»;

   колЧисел=0;  ИзАльфа=Ложь;

   Для ии=1 по СтрДлина(строка) Цикл

       Символ=Сред(Строка,ии,1);

       Если (Символ>=»0″) И (Символ<=»9″) Тогда

           Если НЕ ИзАльфа Тогда

               колЧисел=колЧисел+1;

           КонецЕсли;

           ИзАльфа=Истина;

       Иначе

           ИзАльфа=Ложь;

       КонецЕсли;

   КонецЦикла;

   Сообщить(«Количество целых числительных = «+колЧисел);

   tg30000

24 — 10.05.12 — 13:21

Буду делать .Ок.

   СвинТуз

25 — 10.05.12 — 13:23

а чего тут делать то?

код что ли кривой?

быстрее не будет

   tg30000

26 — 10.05.12 — 13:24

(25) Все верно Вы привели, я думаю как сделать :

Целое число – последовательность символов, содержащая только цифры (отрицательные

числа учитывать не требуется). При этом числа должны разделяться пробелами.

Например, строки «10.5» и «число15» не содержат целых чисел.

   tg30000

27 — 10.05.12 — 13:25

Должно вывестись 2 числа.( 74 и 75)

   СвинТуз

28 — 10.05.12 — 13:26

а так что ли?

ну счас

   СвинТуз

29 — 10.05.12 — 13:26

фигня вопрос

   Fragster

30 — 10.05.12 — 13:26

Регулярка(s|^)d+(s|$)

   aleks-id

31 — 10.05.12 — 13:27

уже третий по счету…

   Fragster

32 — 10.05.12 — 13:30

(31) я хз, не читатель. Но для поиска такого вот — это наибыстрейший и наичитабельнейший (легко сопровождаемый) вариант.

   СвинТуз

33 — 10.05.12 — 13:47

строка=»6f07 only 8after 74 75 310а»;

   Строка2=СтрЗаменить(строка,» «,Символы.ПС);

   колЧисел=0;

   Для ж=1 по СтрЧислоСтрок(Строка2) Цикл

       Стр=СтрПолучитьСтроку(Строка2,ж);

       ЕстьЦифры=Ложь; Цифра=Истина;

       Для ии=1 по СтрДлина(стр) Цикл

           Символ=Сред(Стр,ии,1);

           Если (Символ>=»0″) И (Символ<=»9″) Тогда

               ЕстьЦифры=Истина;

           Иначе

               Цифра=Ложь;

           КонецЕсли;

       КонецЦикла;

       Если ЕстьЦифры и Цифра Тогда

           колЧисел=колЧисел+1;

       КонецЕсли;

   КонецЦикла;

   Сообщить(«Количество целых числительных = «+колЧисел);

   tg30000

34 — 10.05.12 — 13:51

(33) все работает!

Спасибо огромное, буду разбираться вечером для понимания.

Подскажите как лучше по 1с учиться, я начал с 1с Быстрый старт (Гилева), что еще порекомендуете?)

   СвинТуз

35 — 10.05.12 — 13:52

   tg30000

36 — 10.05.12 — 13:54

(35)

Спасибо)

   СвинТуз

37 — 10.05.12 — 13:54

*фокспро

а вообще смотрите литературу по потребности

мне проще я программировать научился до прихода в 1с

на чем тут новички учатся даже не знаю

сейчас вообще часто люди предметную область знают и имеют деньги

а писать вроде как и не обязательно )))

такой вот расклад

   СвинТуз

38 — 10.05.12 — 13:56

и вообще чем дальше

тем меньше кодеров как таковых )))

удачи

   tg30000

39 — 10.05.12 — 13:58

(38)

Этим нужно жить, в плане профессии что бы стать действительно хорошим специалистом,ведь если сам хочешь что-то добиться и интерес есть то все получится)

Спасибо еще раз !

Вам тоже всего хорошего)

   Fragster

41 — 10.05.12 — 13:59

а регулярные выражения всё равно знать надо, вдруг они в 1с таки появятся

   СвинТуз

42 — 10.05.12 — 14:04

(41)

ну некоторые например любят рекурсию

а я например даже не знаю что это такое

как на мехмате -1 бал на практике получил

вместе с популярным объяснением ,

что рекурсия для ленивых идиотов …

и почему для них

так сразу и забыл о ней

зато узнал что такое ресурсы

а некоторые любят )

тут от многого зависит )))

даже при приеме на работу ее дают

   СвинТуз

43 — 10.05.12 — 14:05

жизнь многообразна

   aleks-id

44 — 10.05.12 — 15:10

(32) я про тему. две точно таких же было уже.

v8: Подсчет целых чисел в строке

вторую не могу найти, и третья наподобие

Разделить цифры в числе пробелами

   Fragster

45 — 10.05.12 — 15:28

(42) если сравнишь (30) и (33) на строках > 100 символов, то (30) будет быстрее.

   Fragster

46 — 10.05.12 — 15:28

(45)+ и чем больше строка — тем разница будет больше

   СвинТуз

47 — 10.05.12 — 17:41

(45)

ты вообще о чем?

Регулярка(s|^)d+(s|$)

это вообще о чем? я наверное не в теме = я не понимаю

что то из области фантастики?

   Fragster

48 — 10.05.12 — 17:43

   СвинТуз

49 — 10.05.12 — 17:44

не я подозреваю что лет через пять оно обязательно

начнет работать на 1с и на строке длиннее 100 символов будет давать

большую скорочть чем длинный код

сейчас то как работает?

   Fragster

50 — 10.05.12 — 17:45

   Fragster

52 — 10.05.12 — 17:45

   СвинТуз

53 — 10.05.12 — 17:46

гы … да ты озверел что ли?

ради этих слез по выигрышу скорости целый комобъект подключать?

ну развлекайся если есть желание

   СвинТуз

54 — 10.05.12 — 17:46

я уже перерос

   Fragster

55 — 10.05.12 — 17:46

(53) ну, у тебя видимо, не было затыка именно в скорости обработки строк.

   СвинТуз

56 — 10.05.12 — 17:49

(55)

не знаю … никогда не тормозило

именно на строках

все больше на обращению к серверам

при больших запросах

   Fragster

57 — 10.05.12 — 17:49

(55)+ а когда в документе >100к серийных номеров, то хранить их можно только как строку с разделителями. даже примитивный ПолучитьМассивИзСтроки принимает вид не совсем эстетичный:

ЗначениеИзСтрокиВнутр(«{«»#»»,51e7a0d2-530b-11d4-b98a-008048da3034,{0,{«»S»»,»»» + СтрЗаменить(СтрЗаменить(Строка, «»»», «»»»»»), Разделитель, «»»},{«»S»»,»»») + «»»}}}»)

   Fragster

58 — 10.05.12 — 17:51

   СвинТуз

59 — 10.05.12 — 17:52

на фоксе тоже было время ради работы с каталогами

бейсиковские объекты подключал

красиво было писать )))

пару циклов в одну строку вмещал = круто

а потом как то потерялся этот комобъект

то ли винду поменяли … то ли способ подключения …

весело было

   Fragster

60 — 10.05.12 — 17:56

(59) ну, выпилить WSH из винды достаточно сложно

   СвинТуз

61 — 10.05.12 — 17:59

(60)

ну пользуйте конечно

тем более это еще один способ сбить со следа конкурентов, и последователей ,

которые не в курсе методов этого объекта

   Fragster

62 — 10.05.12 — 18:10

(61) использование (30) только сократит и упростит код.

Извраты типа (57)(58) сделаны от безысходности. (57) на строке, которая в 50к массив должна разложиться дает выигрыш около 300 раз

  

Kreont

63 — 10.05.12 — 18:16

0 / 0 / 1

Регистрация: 24.01.2014

Сообщений: 51

1

Как в строке найти целые числа

04.04.2014, 20:51. Показов 16071. Ответов 5


Студворк — интернет-сервис помощи студентам

Здраствуйте . В java новичок, поэтому есть вопрос.Скажите как из строки найти целые числа.И записать их в массив int a [].(если не затруднит поставьте коментарии)



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

04.04.2014, 20:51

5

Freedomen

61 / 61 / 19

Регистрация: 06.09.2013

Сообщений: 236

Записей в блоге: 1

04.04.2014, 23:38

2

Лучший ответ Сообщение было отмечено viifelso как решение

Решение

Java
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
public int[] getIntNums(String str) {
        int[] result = new int[lengthOfIntNums(str)];
        
        if(result.length == str.length()) {
            for(int i = 0; i < str.length(); i++) {
                result[i] = str.charAt(i) - '0';
            }
        } else {
            System.out.println("Какой-то элемент - не целое число.");
        }
        
        return result;
    }
    
    public int lengthOfIntNums(String str) {
        char[] nums = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        int length = 0;
        
        for(char elem : nums) {
            for(int i = 0; i < str.length(); i++) {
                if(elem == str.charAt(i)) {
                    length++;
                }
            }
        }
        
        return length;
    }



1



some_name

Вежливость-главное оружие

233 / 234 / 86

Регистрация: 19.02.2013

Сообщений: 1,446

05.04.2014, 00:30

3

Лучший ответ Сообщение было отмечено viifelso как решение

Решение

Лови!

Java
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
import java.util.Arrays;
 
public class Main {
 
    public static void main(String[] args) {
 
    String data = "Hello! My age 100. Current time = 23:00";
    int[] digits = findDigits(data);
    int length = digits.length;
    for (int i = 0; i < length; ++i) {
        System.out.print(digits[i] + "  ");
    }
    }
 
    private static int[] findDigits(String str) {
    int length = str.length(), count = 0;
    char[] data = str.toCharArray();
    int[] result = new int[length];
    for (int i = 0; i < data.length; ++i) {
        if (Character.isDigit(data[i])) {
        result[count++] = Integer.parseInt(Character.toString(data[i]));
        }
    }
 
    return Arrays.copyOfRange(result, 0, count);
    }
}

//Out
1 0 0 2 3 0 0



2



0 / 0 / 1

Регистрация: 24.01.2014

Сообщений: 51

05.04.2014, 01:06

 [ТС]

4

Спасибо вам ребят.



0



tankomaz

ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ

443 / 442 / 100

Регистрация: 14.10.2012

Сообщений: 1,146

Записей в блоге: 9

05.04.2014, 01:22

5

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public static void main(String[] args) {
        List<Integer> integers = new ArrayList<>();
 
        String str = "123 sd sd 152 45 dfsvcx 949 34 3 jdfdgh 12,18 12,65 1,1";
 
        Pattern pattern = Pattern.compile("\d+\S?\d*");
        Matcher matcher = pattern.matcher(str);
        while(matcher.find()) {
            String s = matcher.group(0);
            if (s.replaceAll("\D", "").length() == s.length()) {
                integers.add(Integer.parseInt(s));
            }
        }
 
        System.out.println(integers);
    }

[123, 152, 45, 949, 34, 3]



1



0 / 0 / 1

Регистрация: 24.01.2014

Сообщений: 51

05.04.2014, 02:01

 [ТС]

6

Извиняюсь , но если не правильно понял код , в в обоих случаях массивы из строк сравниваются посимвольно. Т . e. строка «12kjj34jnjb565bj4bjbbj» получиться массивом 1234565 . А этого не должно быть!
она должна записана в массиве как 12 34 565

Добавлено через 58 секунд
tankomaz, спасибо



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

05.04.2014, 02:01

Помогаю со студенческими работами здесь

Дан текстовый файл, содержащий целые числа. Найти максимальный элемент в каждой строке.
9.3. Дан текстовый файл, содержащий целые числа. Найти максимальный элемент в каждой строке.

Дан текстовый файл, содержащий целые числа. Найти максимальный элемент в каждой строке
Помогите ребята решить задачу!!! Дан текстовый файл, содержащий целые числа. Найти максимальный…

В исходной строке, содержащей перечисленные через пробел слова, найти целые положительные числа и составить из них новую строку
Задание:
В исходной строке, содержащей перечисленные через
пробел слова, найти целые…

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

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

6

5 ответов

Вы запрашиваете 0 или более цифр. Вам нужно запросить 1 или больше:

"\d+"

Arkadiy
16 дек. 2008, в 19:42

Поделиться

Похоже, что другим решениям не удалось обработать +/- и такие случаи, как 2e3, поддержка java.lang.Integer.parseInt(String), поэтому я пойду на эту проблему. Я немного неопытен в регулярном выражении, поэтому я, возможно, допустил несколько ошибок, использовал то, что парсер Java regex не поддерживает, или сделал его чрезмерно сложным, но показания, казалось, работали в Kiki 0.5.6.

Все регулярные выражения предоставляются как в незапрограммированном формате для чтения, так и в формате escaped, который можно использовать в качестве строкового литерала в Java.

Чтобы получить байт, короткий, int или длинный от строки:

unescaped: ([+-]?d+)([eE][+-]?d+)?
  escaped: ([\+-]?\d+)([eE][\+-]?\d+)?

… и для бонусных очков…

Чтобы получить double или float из строки:

unescaped: ([+-]?d(.d*)?|.d+)([eE][+-]?(d(.d*)?|.d+))?
  escaped: ([\+-]?\d(\.\d*)?|\.d+)([eE][\+-]?(\d(\.\d*)?|\.\d+))?

bgw
10 сен. 2010, в 22:43

Поделиться

спецификация java действительно дает этому монстру регулярное выражение для парсинга двойников.
однако это считается плохой практикой, просто пытаясь разобрать с предполагаемым типом и поймать ошибку, имеет тенденцию быть немного читабельнее.

DOUBLE_PATTERN = Pattern
        .compile("[\x00-\x20]*[+-]?(NaN|Infinity|((((\p{Digit}+)(\.)?((\p{Digit}+)?)"
                + "([eE][+-]?(\p{Digit}+))?)|(\.((\p{Digit}+))([eE][+-]?(\p{Digit}+))?)|"
                + "(((0[xX](\p{XDigit}+)(\.)?)|(0[xX](\p{XDigit}+)?(\.)(\p{XDigit}+)))"
                + "[pP][+-]?(\p{Digit}+)))[fFdD]?))[\x00-\x20]*");

user3034617
02 сен. 2016, в 20:00

Поделиться

В дополнение к тому, что сказал PiPeep, если вы пытаетесь сопоставить целые числа внутри выражения, так что 1 + 2 - 3 будет соответствовать только 1, 2 и 3, а не 1, + 2 и - 3, вам действительно нужно использовать оператор lookbehind, а часть, которую вы хотите, будет фактически возвращена Matcher.group(2), а не только Matcher.group().

unescaped: ([0-9])?((?(1)(?:[+-]?d+)|)(?:[eE][+-]?d+)?)
  escaped: ([0-9])?((?(1)(?:[\+-]?\d+)|)(?:[eE][\+-]?\d+)?)

Кроме того, для таких вещей, как someNumber - 3, где someNumber — имя переменной или что-то в этом роде, вы можете использовать

unescaped: (w)?((?(1)(?:[+-]?d+)|)(?:[eE][+-]?d+)?)
  escaped: (\w)?((?(1)(?:[\+-]?\d+)|)(?:[eE][\+-]?\d+)?)

Хотя, конечно, это не работает, если вы разбираете строку типа The net change to blahblah was +4

AJMansfield
20 дек. 2012, в 19:56

Поделиться

Это удобный, который я сделал для С# с дженериками. Он будет соответствовать вашим регулярным выражениям и возвращать нужные вам типы:

public T[] GetMatches<T>(string Input, string MatchPattern) where T : IConvertible
    {
        List<T> MatchedValues = new List<T>();
        Regex MatchInt = new Regex(MatchPattern);

        MatchCollection Matches = MatchInt.Matches(Input);
        foreach (Match m in Matches)
            MatchedValues.Add((T)Convert.ChangeType(m.Value, typeof(T)));

        return MatchedValues.ToArray<T>();
    }

то, если вы хотите захватить только числа и вернуть их в строку [] array:

string Test = "22$data44abc";
string[] Matches = this.GetMatches<string>(Test, "\d+");

Надеюсь, это полезно кому-то…

Smitty
22 окт. 2009, в 21:40

Поделиться

Ещё вопросы

  • 1Выберите размер изображения в намерении камеры
  • 0C ++: файловый ввод / вывод с трудностями при открытии и работе с ним
  • 1Scrapy пустой CSV-файл
  • 0jQuery не работает в .load ()
  • 1Как вы конвертируете несколько вложенных циклов в лямбду или linq, если у вас сложная структура объекта?
  • 1Сборный размер Unity
  • 0Почему ElementTree не может правильно проанализировать этот тег XML?
  • 0Слайд-шоу изображений Jquery не начинается с начала
  • 0Библиотека разметки каскадных сеток
  • 0Найти путь с минимальной стоимостью между несколькими узлами
  • 0Замена нескольких экземпляров слов на .replace
  • 0Реализация BFS
  • 0отключить всплывающее окно с ошибкой в visual studio
  • 1Снимок экрана устройства Android, отключение записи экрана
  • 0Оптимизация WHERE с использованием одного значения на нескольких столбцах
  • 0Многопользовательская архитектура
  • 1Обрабатывать всплывающее окно JavaScript внутри div
  • 1Изменение целевого фреймворка в приложении Xamarin.forms с Android 8.1 на Android 9 (для Xamarin.Essentials)
  • 0Как расположить кнопку ввода файла с правой стороны внутри текстового поля
  • 0Использование CONCAT с оператором CASE работает некорректно
  • 0Загружая контент в div с помощью jQuery.load (), как я могу заставить новые изображения исчезать при загрузке?
  • 1Добавление минут к метке времени в python
  • 1Как рассчитать сумму целых чисел ArrayList из пользовательского ввода
  • 0Получить HTML-теги как страницу из базы данных
  • 0OS X 10.10 (yosemite) PHP 5.5.14 — есть ли способ установить поддержку png без HomeBrew
  • 0C ++, используя операторы if-else для вычисления sin и cos
  • 0Как получить / Перенаправить на следующую страницу после отправки запроса с помощью cURL в PHP?
  • 0fnfilter проблема поиска в datatables
  • 1Android XML динамически устанавливает высоту полей
  • 1Ошибки Entity Framework Validation неправильно обрабатываются клиентом breeze.sharp
  • 0Html.toHtml () не конвертирует текст RelativeSizeSpan ‘ed
  • 1Метод запуска Windows C # в определенное время
  • 1Зачем закрывать выпадающий список, когда я нажимаю на открытый модал?
  • 0SQL выберите для последовательного столбца
  • 1Действия в андроид студии не переключаются после нажатия кнопки
  • 1Синтаксическая ошибка при реализации API Google Map Javascript с помощью Smarty
  • 0Как мы можем подчеркнуть n-ю букву в угловом ng-повторении?
  • 0ASP.net устанавливает курсор и меняет фокус на кнопку ввода
  • 1Лучший способ создать этот класс Locus
  • 0Поверните строки таблицы в столбцы без результата
  • 1Есть ли способ правильно смоделировать базу данных комнаты?
  • 0Как я могу прочитать файл со строками разного количества чисел
  • 0отредактируйте htaccess, чтобы сделать его нечувствительным к регистру
  • 1Настройка EntityFramework 6 и WCF Data Services 5.6
  • 1Как скопировать / повторить массив N раз в новый массив? [Дубликат]
  • 1Бот Discord отправляет встроенное сообщение на другой канал
  • 1Встроенная проверка версии SDK в Android XML?
  • 0Форма входа Python Mechanize, отправка ввода в поле со случайно сгенерированным именем
  • 0MySQL не может отображать полные данные
  • 0Невозможно получить объектную модель в Angular

Понравилась статья? Поделить с друзьями:
  • Как составить resume на работу
  • Как найти одноклассницу в тик токе
  • Как найти фазное напряжение по формуле
  • File parsing error как исправить на телефоне
  • Как найти игру с вирусом