есть string строка, например
string str ="ddadsadwd 1337 dsdggf";
нужно найти в ней число и выписать в переменную int
задан 20 ноя 2016 в 14:07
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 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
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
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
5,1032 gold badges38 silver badges41 bronze badges
asked Jan 19, 2011 at 10:24
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.
answered Jan 19, 2011 at 10:29
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
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
20.3k24 gold badges106 silver badges134 bronze badges
answered Jan 19, 2011 at 10:27
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 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
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
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
answered Aug 30, 2019 at 14:05
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
20.3k24 gold badges106 silver badges134 bronze badges
answered Jan 13, 2013 at 1:25
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
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
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 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
1
You can do this using String
property like below:
return new String(input.Where(Char.IsDigit).ToArray());
which gives only number from string.
answered Dec 15, 2016 at 17:31
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 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
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
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
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
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
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
2,6895 gold badges31 silver badges36 bronze badges
answered May 2, 2018 at 19:53
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
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
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);
answered Jan 11, 2013 at 18:05
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
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
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 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
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
user2320464user2320464
3611 gold badge5 silver badges11 bronze badges
найти целые числа из строки |
Я |
10.05.12 — 12:46
Подскажите что-то запутался..
Имеется строка, в ней нужно найти целые числа..
Процедура ПриНачалеРаботыСистемы()
Предупреждение( КоличествоЦелыхЧиселВСтроке() );
КонецПроцедуры
Функция КоличествоЦелыхЧиселВСтроке()
СтрокаПоиска =»6f07 only 8after 74 75 310а»;
КоличествоСимволовСтроки = СтрДлина(СтрокаПоиска);
Для Счетчик=1 По КоличествоСимволовСтроки Цикл
ВыбираемыйСимвол=Сред(СтрокаПоиска,Счетчик,1);
КодСимвола = КодСимвола(ВыбираемыйСимвол);
Сообщить(ВыбираемыйСимвол);
КонецЦикла;
КонецФункции
1 — 10.05.12 — 12:47
я нашел такие: 6 0 7 8 7 4 7 5 3 1 0 — всего 11 чисел
2 — 10.05.12 — 12:49
(1) не пойму как проверит посимвольно из строки является символ числом или нет, вот в чем вопрос.
3 — 10.05.12 — 12:50
Если Найти(«0123456789»,Символ)>0 Тогда
4 — 10.05.12 — 12:50
(2) КодСимвола() МЕЖДУ НеПомнюЧем
5 — 10.05.12 — 12:51
ну или так
Попытка
ч = Число(ВыбираемыйСимвол);
Исключение
КонецПопытки;
6 — 10.05.12 — 12:52
«ИзСтрокиТолькоЦифры» типовые > глобальный поиск
не нада писать г-код, придерживайтесь стандартов, какими бы кривыми они не казались
7 — 10.05.12 — 12:53
(5) рассрелять бы тебя)
8 — 10.05.12 — 12:53
прикол в том, что 310 тоже целое число в (1), и цифры из которых он состоит — тоже целые числа,
я бы тупо перебрал все подстроки — каждую из них форматировал в число через попытка — исключение, а потом из них отобрал бы целые
9 — 10.05.12 — 12:53
(3) (4) (5) (6)Спасибо большое , разобрался теперь
10 — 10.05.12 — 12:54
(8) я в курсе, но он же не пишет точную постановку
11 — 10.05.12 — 12:54
А 75 считается за целое число ?
12 — 10.05.12 — 12:55
На вход подается
произвольная строка, фуннкция должна вернуть количество целых чисел в ней
Целое число – последовательность символов, содержащая только цифры (отрицательные
числа учитывать не требуется). При этом числа должны разделяться пробелами.
Например, строки «10.5» и «число15» не содержат целых чисел.
13 — 10.05.12 — 12:55
а ещё можно СтрЗаменить все нецифры на пробелы, разложить в многострочную строку, поудалять оттуда пустые строки…
14 — 10.05.12 — 12:56
Стараюсь сделать по следующему принципу, пока не получается…
В этой задаче можно использовать два вложенных цикла. В первом последовательно перебирать символы строки и сравнивать их с числом. Для сравнения символа с числом можно воспользоваться функцией КодСимвола(). После того как получили первое число и если слева есть пробел запускать второй цикл, в котором последовательно проверять следующие символы и смотреть являются ли они числом. Если найденные символы числа и справа есть пробел, то найдено целое число. Счетчик чисел увеличить на 1.
15 — 10.05.12 — 12:56
(12) исходя из этой постановки решение телепаты не угадали.
16 — 10.05.12 — 12:56
(12) раскладывай в массив через пробелы, потом попыткой со счётчиком. просто.
17 — 10.05.12 — 12:57
+(16) и ещё: Если Цел(а)=а Тогда ЯвляетсяЦелым
18 — 10.05.12 — 12:58
Ок! Всем Спасибо за посильную помощь)
19 — 10.05.12 — 13:09
Что-то не пойму если писать
ВыбираемыйСимвол=Сред(СтрокаПоиска,Счетчик,1);
то ВыбираемыйСимвол является строкой? как сделать проверку типа , число это или нет?
Если Тип(«Число»)=ТипЗнч(ВыбираемыйСимвол) Тогда — не правильно же?
20 — 10.05.12 — 13:13
(19) в (9) за что спасибо то сказал ?:)
21 — 10.05.12 — 13:14
(20) ну все при работе выявляется ,начал просто сейчас делать, появились вопросы.
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;
КонецЕсли;
ИзАльфа=Истина;
Иначе
ИзАльфа=Ложь;
КонецЕсли;
КонецЦикла;
Сообщить(«Количество целых числительных = «+колЧисел);
24 — 10.05.12 — 13:21
Буду делать .Ок.
25 — 10.05.12 — 13:23
а чего тут делать то?
код что ли кривой?
быстрее не будет
26 — 10.05.12 — 13:24
(25) Все верно Вы привели, я думаю как сделать :
Целое число – последовательность символов, содержащая только цифры (отрицательные
числа учитывать не требуется). При этом числа должны разделяться пробелами.
Например, строки «10.5» и «число15» не содержат целых чисел.
27 — 10.05.12 — 13:25
Должно вывестись 2 числа.( 74 и 75)
28 — 10.05.12 — 13:26
а так что ли?
ну счас
29 — 10.05.12 — 13:26
фигня вопрос
30 — 10.05.12 — 13:26
Регулярка(s|^)d+(s|$)
31 — 10.05.12 — 13:27
уже третий по счету…
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;
КонецЕсли;
КонецЦикла;
Сообщить(«Количество целых числительных = «+колЧисел);
34 — 10.05.12 — 13:51
(33) все работает!
Спасибо огромное, буду разбираться вечером для понимания.
Подскажите как лучше по 1с учиться, я начал с 1с Быстрый старт (Гилева), что еще порекомендуете?)
35 — 10.05.12 — 13:52
36 — 10.05.12 — 13:54
(35)
Спасибо)
37 — 10.05.12 — 13:54
*фокспро
а вообще смотрите литературу по потребности
мне проще я программировать научился до прихода в 1с
на чем тут новички учатся даже не знаю
сейчас вообще часто люди предметную область знают и имеют деньги
а писать вроде как и не обязательно )))
такой вот расклад
38 — 10.05.12 — 13:56
и вообще чем дальше
тем меньше кодеров как таковых )))
удачи
39 — 10.05.12 — 13:58
(38)
Этим нужно жить, в плане профессии что бы стать действительно хорошим специалистом,ведь если сам хочешь что-то добиться и интерес есть то все получится)
Спасибо еще раз !
Вам тоже всего хорошего)
41 — 10.05.12 — 13:59
а регулярные выражения всё равно знать надо, вдруг они в 1с таки появятся
42 — 10.05.12 — 14:04
(41)
ну некоторые например любят рекурсию
а я например даже не знаю что это такое
как на мехмате -1 бал на практике получил
вместе с популярным объяснением ,
что рекурсия для ленивых идиотов …
и почему для них
так сразу и забыл о ней
зато узнал что такое ресурсы
а некоторые любят )
тут от многого зависит )))
даже при приеме на работу ее дают
43 — 10.05.12 — 14:05
жизнь многообразна
44 — 10.05.12 — 15:10
(32) я про тему. две точно таких же было уже.
v8: Подсчет целых чисел в строке
вторую не могу найти, и третья наподобие
Разделить цифры в числе пробелами
45 — 10.05.12 — 15:28
(42) если сравнишь (30) и (33) на строках > 100 символов, то (30) будет быстрее.
46 — 10.05.12 — 15:28
(45)+ и чем больше строка — тем разница будет больше
47 — 10.05.12 — 17:41
(45)
ты вообще о чем?
Регулярка(s|^)d+(s|$)
это вообще о чем? я наверное не в теме = я не понимаю
что то из области фантастики?
48 — 10.05.12 — 17:43
49 — 10.05.12 — 17:44
не я подозреваю что лет через пять оно обязательно
начнет работать на 1с и на строке длиннее 100 символов будет давать
большую скорочть чем длинный код
сейчас то как работает?
50 — 10.05.12 — 17:45
52 — 10.05.12 — 17:45
53 — 10.05.12 — 17:46
гы … да ты озверел что ли?
ради этих слез по выигрышу скорости целый комобъект подключать?
ну развлекайся если есть желание
54 — 10.05.12 — 17:46
я уже перерос
55 — 10.05.12 — 17:46
(53) ну, у тебя видимо, не было затыка именно в скорости обработки строк.
56 — 10.05.12 — 17:49
(55)
не знаю … никогда не тормозило
именно на строках
все больше на обращению к серверам
при больших запросах
57 — 10.05.12 — 17:49
(55)+ а когда в документе >100к серийных номеров, то хранить их можно только как строку с разделителями. даже примитивный ПолучитьМассивИзСтроки принимает вид не совсем эстетичный:
ЗначениеИзСтрокиВнутр(«{«»#»»,51e7a0d2-530b-11d4-b98a-008048da3034,{0,{«»S»»,»»» + СтрЗаменить(СтрЗаменить(Строка, «»»», «»»»»»), Разделитель, «»»},{«»S»»,»»») + «»»}}}»)
58 — 10.05.12 — 17:51
59 — 10.05.12 — 17:52
на фоксе тоже было время ради работы с каталогами
бейсиковские объекты подключал
красиво было писать )))
пару циклов в одну строку вмещал = круто
а потом как то потерялся этот комобъект
то ли винду поменяли … то ли способ подключения …
весело было
60 — 10.05.12 — 17:56
(59) ну, выпилить WSH из винды достаточно сложно
61 — 10.05.12 — 17:59
(60)
ну пользуйте конечно
тем более это еще один способ сбить со следа конкурентов, и последователей ,
которые не в курсе методов этого объекта
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 как решение Решение
1 |
some_name Вежливость-главное оружие 233 / 234 / 86 Регистрация: 19.02.2013 Сообщений: 1,446 |
||||
05.04.2014, 00:30 |
3 |
|||
Сообщение было отмечено viifelso как решение РешениеЛови!
//Out
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 |
|||
[123, 152, 45, 949, 34, 3]
1 |
0 / 0 / 1 Регистрация: 24.01.2014 Сообщений: 51 |
|
05.04.2014, 02:01 [ТС] |
6 |
Извиняюсь , но если не правильно понял код , в в обоих случаях массивы из строк сравниваются посимвольно. Т . e. строка «12kjj34jnjb565bj4bjbbj» получиться массивом 1234565 . А этого не должно быть! Добавлено через 58 секунд
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
05.04.2014, 02:01 |
Помогаю со студенческими работами здесь Дан текстовый файл, содержащий целые числа. Найти максимальный элемент в каждой строке. Дан текстовый файл, содержащий целые числа. Найти максимальный элемент в каждой строке В исходной строке, содержащей перечисленные через пробел слова, найти целые положительные числа и составить из них новую строку Дан текстовый файл, содержащий целые числа. В каждой строке этого файла найти сумму наибольшего и наименьшего элементов и записать их в другой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 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