@@ -4,36 +4,37 @@ import org.junit.jupiter.api.Assertions
4
4
import org.junit.jupiter.api.Test
5
5
import org.junit.jupiter.params.ParameterizedTest
6
6
import org.junit.jupiter.params.provider.CsvSource
7
+ import java.math.BigInteger
7
8
8
- fun extractUsingRegex (str : String ): Long ? {
9
- return Regex (" \\ d+" ).find(str)?.value?.toLongOrNull ()
9
+ fun extractUsingRegex (str : String ): BigInteger ? {
10
+ return Regex (" \\ d+" ).find(str)?.value?.toBigIntegerOrNull ()
10
11
}
11
12
12
- fun extractMultipleUsingRegex (str : String ): List <Long > {
13
- return Regex (" \\ d+" ).findAll(str).map { it.value.toLong () }.toList()
13
+ fun extractMultipleUsingRegex (str : String ): List <BigInteger > {
14
+ return Regex (" \\ d+" ).findAll(str).map { it.value.toBigInteger () }.toList()
14
15
}
15
16
16
- fun extractNumbersUsingSplitAndRegex (str : String ): List <Long > {
17
+ fun extractNumbersUsingSplitAndRegex (str : String ): List <BigInteger > {
17
18
return str.split(Regex (" \\ D+" ))
18
19
.filter { it.isNotBlank() }
19
- .map { it.toLong () }
20
+ .map { it.toBigInteger () }
20
21
}
21
22
22
- fun extractNumbersUsingLoop (str : String ): List <Long > {
23
- val numbers = mutableListOf<Long >()
23
+ fun extractNumbersUsingLoop (str : String ): List <BigInteger > {
24
+ val numbers = mutableListOf<BigInteger >()
24
25
val currentNumber = StringBuilder ()
25
26
26
27
for (char in str) {
27
28
if (char.isDigit()) {
28
29
currentNumber.append(char)
29
30
} else if (currentNumber.isNotEmpty()) {
30
- numbers.add(currentNumber.toString().toLong ())
31
+ numbers.add(currentNumber.toString().toBigInteger ())
31
32
currentNumber.clear()
32
33
}
33
34
}
34
35
35
36
if (currentNumber.isNotEmpty()) {
36
- numbers.add(currentNumber.toString().toLong ())
37
+ numbers.add(currentNumber.toString().toBigInteger ())
37
38
}
38
39
39
40
return numbers
@@ -49,11 +50,12 @@ class NumberExtractUnitTest {
49
50
" string 123-234, 123" ,
50
51
" no numbers," ,
51
52
" 3 4 50 numbers6, 3" ,
52
- " 123456789large numbers0, 123456789"
53
+ " 123456789large numbers0, 123456789" ,
54
+ " 91234567891011121314151617181920number,91234567891011121314151617181920"
53
55
)
54
56
fun `extract first occurrence of number from string using regex` (str : String , expected : String? ) {
55
57
val number = extractUsingRegex(str)
56
- Assertions .assertEquals(number, expected?.toLongOrNull ())
58
+ Assertions .assertEquals(number, expected?.toBigIntegerOrNull ())
57
59
}
58
60
59
61
@ParameterizedTest
@@ -63,11 +65,12 @@ class NumberExtractUnitTest {
63
65
" string 123-234, 123:234" ,
64
66
" no numbers," ,
65
67
" 3 4 50 numbers6, 3:4:50:6" ,
66
- " 123456789large numbers0, 123456789:0"
68
+ " 123456789large numbers0, 123456789:0" ,
69
+ " 91234567891011121314151617181920number,91234567891011121314151617181920"
67
70
)
68
71
fun `extract all occurrences of numbers from string using regex` (str : String , expected : String? ) {
69
72
val numbers = extractMultipleUsingRegex(str)
70
- val expectedList = expected?.split(" :" )?.map { it.toLong () } ? : emptyList()
73
+ val expectedList = expected?.split(" :" )?.map { it.toBigInteger () } ? : emptyList()
71
74
Assertions .assertEquals(expectedList, numbers)
72
75
}
73
76
@@ -78,11 +81,12 @@ class NumberExtractUnitTest {
78
81
" string 123-234, 123:234" ,
79
82
" no numbers," ,
80
83
" 3 4 50 numbers6, 3:4:50:6" ,
81
- " 123456789large numbers0, 123456789:0"
84
+ " 123456789large numbers0, 123456789:0" ,
85
+ " 91234567891011121314151617181920number,91234567891011121314151617181920"
82
86
)
83
87
fun `extract all occurrences of numbers from string using split and regex` (str : String , expected : String? ) {
84
88
val numbers = extractNumbersUsingSplitAndRegex(str)
85
- val expectedList = expected?.split(" :" )?.map { it.toLong () } ? : emptyList()
89
+ val expectedList = expected?.split(" :" )?.map { it.toBigInteger () } ? : emptyList()
86
90
Assertions .assertEquals(expectedList, numbers)
87
91
}
88
92
@@ -93,30 +97,31 @@ class NumberExtractUnitTest {
93
97
" string 123-234, 123:234" ,
94
98
" no numbers," ,
95
99
" 3 4 50 numbers6, 3:4:50:6" ,
96
- " 123456789large numbers0, 123456789:0"
100
+ " 123456789large numbers0, 123456789:0" ,
101
+ " 91234567891011121314151617181920number,91234567891011121314151617181920"
97
102
)
98
103
fun `extract all occurrences of numbers from string using loop` (str : String , expected : String? ) {
99
104
val numbers = extractNumbersUsingLoop(str)
100
- val expectedList = expected?.split(" :" )?.map { it.toLong () } ? : emptyList()
105
+ val expectedList = expected?.split(" :" )?.map { it.toBigInteger () } ? : emptyList()
101
106
Assertions .assertEquals(expectedList, numbers)
102
107
}
103
108
104
109
@Test
105
110
fun `check empty string scenario for loop` () {
106
111
val numbers = extractNumbersUsingLoop(" " )
107
- Assertions .assertIterableEquals(numbers, listOf<Long >())
112
+ Assertions .assertIterableEquals(numbers, listOf<BigInteger >())
108
113
}
109
114
110
115
@Test
111
116
fun `check empty string scenario for split` () {
112
117
val numbers = extractNumbersUsingSplitAndRegex(" " )
113
- Assertions .assertIterableEquals(numbers, listOf<Long >())
118
+ Assertions .assertIterableEquals(numbers, listOf<BigInteger >())
114
119
}
115
120
116
121
@Test
117
122
fun `check empty string scenario for regex` () {
118
123
val numbers = extractMultipleUsingRegex(" " )
119
- Assertions .assertIterableEquals(numbers, listOf<Long >())
124
+ Assertions .assertIterableEquals(numbers, listOf<BigInteger >())
120
125
}
121
126
122
127
}
0 commit comments