Skip to content

Instantly share code, notes, and snippets.

@edipofederle
Created September 23, 2012 18:12
Show Gist options
  • Select an option

  • Save edipofederle/3772556 to your computer and use it in GitHub Desktop.

Select an option

Save edipofederle/3772556 to your computer and use it in GitHub Desktop.
sc.java
public class StringCalculator {
public static int sum(String numberStr) {
String defaultDelimiter = ",|\n";
String[] numbers;
if(newDelimiter(numberStr)){
String newDelimiter = getNewDelimiter(numberStr);
String newNumberStr = normalize(numberStr,newDelimiter);
numbers = newNumberStr.substring(1, newNumberStr.length()).split(newDelimiter);
}else numbers = numberStr.split(defaultDelimiter);
if(isMultipeNumbers(numbers)) return sumMultipleNumbers(numbers);
if ("".equals(numberStr)) return 0;
return Integer.parseInt(numberStr);
}
private static String normalize(String numberStr, String newDelimiter) {
String temp = numberStr.substring(3,numberStr.length());
return temp.replaceAll("\n", newDelimiter);
}
private static String getNewDelimiter(String string) {
String newDelimiter = string.substring(2, 3);
return "\\"+newDelimiter;
}
private static boolean newDelimiter(String string) {
return string.startsWith("//");
}
private static int sumMultipleNumbers(String[] numbers) {
int sum = 0;
String negativesNumebrs = "";
for (int i = 0; i < numbers.length; i++){
String value = numbers[i].trim();
if(Integer.parseInt(value) < 0)
negativesNumebrs += value+",";
sum += Integer.parseInt(value);
}
if(!negativesNumebrs.equals(""))
throw new IllegalArgumentException("Não é permitido números negativos: " + negativesNumebrs.substring(0, negativesNumebrs.length()-1).trim());
return sum;
}
private static boolean isMultipeNumbers(String[] numbers) {
return numbers.length > 1;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment