The challenge
Given a variable n
,
If n
is an integer, Return a string with dash'-'
marks before and after each odd integer, but do not begin or end the string with a dash mark. If n
is negative, then the negative sign should be removed.
If n
is not an integer, return an empty value.
Ex:
dashatize(274) -> '2-7-4'
dashatize(6815) -> '68-1-5'
The solution in Java code
Option 1:
public class Solution {
public static String dashatize(int num) {
String n = String.valueOf(Math.abs(num)).replaceAll("-", "");
return java.util.Arrays.asList(n.split("")).stream()
.map(ch -> Integer.valueOf(ch) % 2 !=0 ? "-"+ch+"-" : ch)
.collect(java.util.stream.Collectors.joining(""))
.replaceAll("--", "-")
.replaceAll("^-+", "")
.replaceAll("-+$", "");
}
}
Option 2:
public class Solution {
public static String dashatize(final int number) {
return String.valueOf(number)
.replaceAll("([13579])", "-$1-")
.replaceAll("--", "-")
.replaceAll("^-|-$", "");
}
}
Option 3:
import java.util.*;
public class Solution {
public static String dashatize(int num) {
String str = String.valueOf(num);
if(str.charAt(0) == '-')
str = str.substring(1);
return String.join("-",str.split("(?=[1,3,5,7,9])|(?<=[1,3,5,7,9])"));
}
}
Test cases to validate our solution
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;
public class SolutionTest {
@Test
public void testBasic() {
assertEquals("2-7-4", Solution.dashatize(274));
assertEquals("5-3-1-1", Solution.dashatize(5311));
assertEquals("86-3-20", Solution.dashatize(86320));
assertEquals("9-7-4-3-02", Solution.dashatize(974302));
}
@Test
public void testWeird() {
assertEquals("0", Solution.dashatize(0));
assertEquals("1", Solution.dashatize(-1));
assertEquals("28-3-6-9", Solution.dashatize(-28369));
}
@Test
public void testEdgeCases() {
assertEquals("2-1-4-7-48-3-64-7", Solution.dashatize(Integer.MAX_VALUE));
assertEquals("2-1-4-7-48-3-648", Solution.dashatize(Integer.MIN_VALUE));
assertEquals("1-1-1-1-1-1-1-1-1-1", Solution.dashatize(-1111111111));
}
}