Skip to content

Commit 0372e11

Browse files
committed
sample code for remove digits tutorial
1 parent 558c080 commit 0372e11

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.baeldung.scala.digits
2+
3+
object RemoveDigits {
4+
5+
def removeFirstNDigits(num: Int, n: Int): Int = {
6+
num.toString.drop(n).toInt
7+
}
8+
9+
def removeFirstNDigitsLimit(num: Int, n: Int): Int = {
10+
val numString = num.toString
11+
if (n >= numString.length)
12+
0
13+
else
14+
numString.drop(n).toInt
15+
}
16+
17+
def removeFirstNDigitsPatternMatching(num: Int, n: Int): Int = {
18+
val numString = num.toString
19+
numString match {
20+
case str if n >= str.length =>
21+
0
22+
case str =>
23+
str.drop(n).toInt
24+
}
25+
}
26+
27+
def removeFirstNDigitsNegative(num: Int, n: Int): Int = {
28+
val numString = num.toString
29+
if (num < 0) {
30+
// For negative numbers, remove the first n digits but keep the negative sign
31+
val absNumString = numString.drop(1) // Drop the negative sign
32+
if (n >= absNumString.length)
33+
0
34+
else
35+
("-" + absNumString.drop(n)).toInt
36+
} else {
37+
// For positive numbers, apply the same logic as before
38+
if (n >= numString.length)
39+
0
40+
else
41+
numString.drop(n).toInt
42+
}
43+
}
44+
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.baeldung.scala.digits
2+
3+
import org.scalatest.flatspec.AnyFlatSpec
4+
import org.scalatest.matchers.should.Matchers
5+
6+
class RemoveDigitsUnitTest extends AnyFlatSpec with Matchers {
7+
8+
val number = 123456
9+
val negativeNumber = -number
10+
11+
"naive" should "return remove first N digits" in {
12+
RemoveDigits.removeFirstNDigits(number, 2) shouldBe 3456
13+
RemoveDigits.removeFirstNDigits(number, 5) shouldBe 6
14+
}
15+
16+
"limit" should "return remove first N digits" in {
17+
RemoveDigits.removeFirstNDigitsLimit(number, 2) shouldBe 3456
18+
RemoveDigits.removeFirstNDigitsLimit(number, 5) shouldBe 6
19+
RemoveDigits.removeFirstNDigitsLimit(number, 6) shouldBe 0
20+
}
21+
22+
"patternMatching" should "return remove first N digits" in {
23+
RemoveDigits.removeFirstNDigitsPatternMatching(number, 2) shouldBe 3456
24+
RemoveDigits.removeFirstNDigitsPatternMatching(number, 5) shouldBe 6
25+
RemoveDigits.removeFirstNDigitsPatternMatching(number, 6) shouldBe 0
26+
}
27+
28+
"negative" should "return remove first N digits" in {
29+
RemoveDigits.removeFirstNDigitsNegative(number, 2) shouldBe 3456
30+
RemoveDigits.removeFirstNDigitsNegative(number, 5) shouldBe 6
31+
RemoveDigits.removeFirstNDigitsNegative(number, 6) shouldBe 0
32+
RemoveDigits.removeFirstNDigitsNegative(negativeNumber, 2) shouldBe -3456
33+
}
34+
35+
}

0 commit comments

Comments
 (0)