[BAEL-7632] Convert a phone number in words to number with Java (#16248)

* [BAEL-7632] Convert a phone number in words to number with Java

* Updated [BAEL-7632] Convert a phone number in words to number with Java

* Updated [BAEL-7632] Convert a phone number in words to number with Java
This commit is contained in:
Mehvish Ashiq 2024-04-07 14:06:16 +05:00 committed by GitHub
parent 2c91616f87
commit bea3105f57
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 200 additions and 0 deletions

View File

@ -0,0 +1,43 @@
import java.util.Map;
public class UseHashMapToConvertPhoneNumberInWordsToNumber {
private static Map<String, Integer> multipliers = Map.of("double",2,
"triple", 3,
"quadruple", 4);
private static Map<String, String> digits = Map.of("zero","1",
"one", "1",
"two", "2",
"three", "3",
"four", "4",
"five", "5",
"six", "6",
"seven", "7",
"eight", "8",
"nine", "9");
public static String convertPhoneNumberInWordsToNumber(String phoneNumberInWord) {
StringBuilder output = new StringBuilder();
Integer currentMultiplier = null;
String[] words = phoneNumberInWord.split(" ");
for (String word : words) {
Integer multiplier = multipliers.get(word);
if (multiplier != null) {
if (currentMultiplier != null) {
throw new IllegalArgumentException("Cannot have consecutive multipliers, at: " + word);
}
currentMultiplier = multiplier;
} else {
String digit = digits.get(word);
if (digit == null) {
throw new IllegalArgumentException("Invalid word: " + word);
}
output.append(digit.repeat(currentMultiplier != null ? currentMultiplier : 1));
currentMultiplier = null;
}
}
return output.toString();
}
}

View File

@ -0,0 +1,64 @@
public class UseSwitchToConvertPhoneNumberInWordsToNumber {
public static String convertPhoneNumberInWordsToNumber(String phoneNumberInWord) {
StringBuilder output = new StringBuilder();
Integer currentMultiplier = null;
String[] words = phoneNumberInWord.split(" ");
for (String word : words) {
Integer multiplier = getWordAsMultiplier(word);
if (multiplier != null) {
if (currentMultiplier != null) {
throw new IllegalArgumentException("Cannot have consecutive multipliers, at: " + word);
}
currentMultiplier = multiplier;
} else {
output.append(getWordAsDigit(word).repeat(currentMultiplier != null ? currentMultiplier : 1));
currentMultiplier = null;
}
}
return output.toString();
}
public static Integer getWordAsMultiplier(String word) {
switch (word) {
case "double":
return 2;
case "triple":
return 3;
case "quadruple":
return 4;
default:
return null;
}
}
public static String getWordAsDigit(String word) {
switch (word) {
case "zero":
return "0";
case "one":
return "1";
case "two":
return "2";
case "three":
return "3";
case "four":
return "4";
case "five":
return "5";
case "six":
return "6";
case "seven":
return "7";
case "eight":
return "8";
case "nine":
return "9";
default:
throw new IllegalArgumentException("Invalid word: " + word);
}
}
}

View File

@ -0,0 +1,31 @@
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class UseHashMapToConvertPhoneNumberInWordsToNumberUnitTest {
@Test
void givenStringWithWhiteSpaces_WhenConvertPhoneNumberInWordsToNumber_ThenEquivalentNumber() {
assertEquals("5248888",
UseHashMapToConvertPhoneNumberInWordsToNumber
.convertPhoneNumberInWordsToNumber("five two four quadruple eight"));
}
@Test
void givenStringEndingWithConseutiveMultipliers_WhenConvertPhoneNumberInWordsToNumber_ThenThrowException() {
assertThrows(IllegalArgumentException.class, () -> {
UseHashMapToConvertPhoneNumberInWordsToNumber
.convertPhoneNumberInWordsToNumber("five eight three double triple");
});
}
@Test
void givenStringWithInvalidWords_WhenConvertPhoneNumberInWordsToNumber_ThenThrowException() {
assertThrows(IllegalArgumentException.class, () -> {
UseHashMapToConvertPhoneNumberInWordsToNumber
.convertPhoneNumberInWordsToNumber("five eight three two four penta null eight");
});
}
}

View File

@ -0,0 +1,62 @@
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class UseSwitchToConvertPhoneNumberInWordsToNumberUnitTest {
@Test
void givenStringWithWhiteSpaces_WhenConvertPhoneNumberInWordsToNumber_ThenEquivalentNumber() {
assertEquals("5248888",
UseSwitchToConvertPhoneNumberInWordsToNumber
.convertPhoneNumberInWordsToNumber("five two four quadruple eight"));
}
@Test
void givenStringEndingWithConseutiveMultipliers_WhenConvertPhoneNumberInWordsToNumber_ThenThrowException() {
assertThrows(IllegalArgumentException.class, () -> {
UseSwitchToConvertPhoneNumberInWordsToNumber
.convertPhoneNumberInWordsToNumber("five eight three double triple");
});
}
@Test
void givenStringWithInvalidWords_WhenConvertPhoneNumberInWordsToNumber_ThenThrowException() {
assertThrows(IllegalArgumentException.class, () -> {
UseSwitchToConvertPhoneNumberInWordsToNumber
.convertPhoneNumberInWordsToNumber("five eight three two four penta null eight");
});
}
@Test
void givenString_WhenGetWordAsMultiplier_ThenEquivalentNumber() {
assertEquals(2, UseSwitchToConvertPhoneNumberInWordsToNumber
.getWordAsMultiplier("double"));
}
@Test
void givenInvalidString_WhenGetWordAsMultiplier_ThenReturnNull() {
assertEquals(null, UseSwitchToConvertPhoneNumberInWordsToNumber
.getWordAsMultiplier("hexa"));
}
@Test
void givenString_WhenMapIndividualDigits_ThenEquivalentNumber() {
assertEquals("5",
UseSwitchToConvertPhoneNumberInWordsToNumber
.getWordAsDigit("five"));
}
@Test
void givenInvalidString_WhenMapIndividualDigits_ThenThrowException() {
assertThrows(IllegalArgumentException.class, () -> {
UseSwitchToConvertPhoneNumberInWordsToNumber
.convertPhoneNumberInWordsToNumber("penta");
});
}
}