我必须在包含“ a-z”,“ 0-9”和“-”的字符串中找到数字的总和,如果在该数字之前有“-”,我将该数字视为负数。 例如,我有这段文字:
asd-12sdf45-56asdf100
,数字-12,45,-56 and 100
的总和为77
。
我设法将所有字母替换为-12 45-56 100
,然后被卡在这里。我尝试拆分成数组,然后parseInt
,尝试了一些带有循环的操作,但是死胡同...有帮助吗?
它可能不是完整的代码;如果您仅给出提示,我可能自己就能解决。
这是我到目前为止编写的代码。
String text = "asd-12sdf45-56asdf100";
String numbers = text.replaceAll("[a-zA-Z]+", " ");
String[] num = numbers.trim().split("[ ]");
int sum = 0;
for (int index = 0; index < num.length; index++) {
int n = Integer.parseInt(num[index]);
sum += n;
}
System.out.println(sum);
P.S:我仍处于IT培训的初期,因此请尽量简化:D预先感谢!
答案 0 :(得分:0)
String s = "-12 45-56 100";
int sum = Stream.of(s.replaceAll("-", " -").split(" ")).filter(e -> !"".equals(e)).mapToInt(Integer::parseInt).sum();
答案 1 :(得分:0)
这听起来很像是一个作业问题,可让您学习正则表达式。因此,我不会为您回答这个问题。但是您可能会发现像以下这样的工具可用于使用正则表达式:
还有大量的资源,以了解如何使用正则表达式:
答案 2 :(得分:0)
您可以将负数和正数添加到单独的列表中,然后分别添加它们,然后进行减法。
答案 3 :(得分:0)
您可以使用正则表达式来匹配字符串中可能出现的数字。我使用的正则表达式基于假设数字可以在字符串中带有或不带有负号的情况下出现。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
final String regex = "[-]*[0-9]+";
final String string = "asd-12sdf45-56asdf100";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
int sum = 0;
while (matcher.find()) {
System.out.println("Found number: " + matcher.group(0));
sum += Integer.parseInt(matcher.group(0));
}
System.out.println("Sum = "+sum);
}
}
Output :
Found number: -12
Found number: 45
Found number: -56
Found number: 100
Sum = 77