我正在尝试通过此链接http://osherove.com/tdd-kata-1/解决以下测试驱动开发练习,但我被困在要求的末尾附近。
我一直害怕正则表达式,但似乎我必须学习它们。无论如何,我正在尝试执行以下操作: - 取一个字符串,从中提取数字并将它们相加。困扰我的要求是
允许像这样的多个分隔符:“//[delim1][delim2]\n” 例如“//[*][%]\n1*2%3”应该返回 6。确保您还可以处理具有长度的多个分隔符长于一个字符。
该要求意味着我必须从以换行符开头和结尾的字符串中提取delim1
,等,然后我需要使用这些分隔符并提取. 每个分隔符都用方括号括起来。delim2
//
\n
\n
现在,我怎么能用正则表达式在java中做到这一点?
到目前为止,我所拥有的是以下代码,涵盖了上述链接中的要求:
import java.util.ArrayList;
public class Calculator {
public String getDelimiter(String input) {
String delimiter = "";
String changeDelimiter = input.split("\\n")[0];
delimiter = changeDelimiter.substring(2);
return delimiter;
}
public int calculate(String input) {
String[] numbers;
if (input.contains("//")) {
String delimiter = getDelimiter(input);
System.out.println("aaaaaaaaaaaaaaaaaaaaaaa : " + delimiter); //testing the value
String calculation = input.split("\\n")[1];
numbers = calculation.split("[" + delimiter + "]+");
System.out.println("bbbbbbbbbbbbbbbbbbbbbbbb"); //testing the values
for (String number : numbers) {
System.out.print(number + ":");
// System.out.print(Integer.parseInt(number) + " ");
}
} else
numbers = input.split(",|\\n");
if (input.isEmpty()) {
return 0;
}
if (input.length() == 1) {
return Integer.parseInt(input);
}
else {
return getSum(numbers);
}
}
private int getSum(String[] numbers) throws IllegalArgumentException {
int sum = 0;
ArrayList<Integer> negatives = new ArrayList<Integer>();
for (int i = 0; i < numbers.length; i++) {
if (Integer.parseInt(numbers[i]) < 0) {
negatives.add(Integer.parseInt(numbers[i]));
}
if (Integer.parseInt(numbers[i]) >= 1000) {
continue;
} else
sum += Integer.parseInt(numbers[i]);
}
if (negatives.isEmpty()) {
return sum;
} else {
String negativeNumbers = "";
for (Integer number : negatives) {
negativeNumbers += number.toString() + " ";
}
throw new IllegalArgumentException("Negatives not allowed : " + negativeNumbers);
}
}
}