Java 方法,该方法获取字符串文本并返回已标识整数的和

Java 方法,该方法获取字符串文本并返回已标识整数的和,java,Java,该方法应采用字符串文本,标识字符串中的所有整数,并返回已标识整数的总和 例如,字符串“a2.05h34-9fmq26”包含整数2、5(05)、34、-9和26,因此该方法应返回58。到目前为止,我有以下代码: public static int sumOfIntegers(String text) { int sum = 0; for(int i = 0; i < text.length(); i++) { if(Character.is

该方法应采用字符串文本,标识字符串中的所有整数,并返回已标识整数的总和

例如,字符串“a2.05h34-9fmq26”包含整数2、5(05)、34、-9和26,因此该方法应返回58。到目前为止,我有以下代码:

public static int sumOfIntegers(String text) {
       int sum = 0;

       for(int i = 0; i < text.length(); i++) {
           if(Character.isDigit(text.charAt(i)))
               sum = sum + Character.getNumericValue(text.charAt(i));
       }
       return sum;
}
公共静态整数(字符串文本){
整数和=0;
对于(int i=0;i
到目前为止,我可以对所有正整数求和,但我不确定的是如何从和中减去负整数。

您可以使用a来查找数字组:

String s = "a2.05h34-9fmq26";
Pattern p = Pattern.compile("-?\\d+");
Matcher matcher = p.matcher(s);

int result = 0;
while (matcher.find()) {
    result += Integer.parseInt(matcher.group());
}

System.out.println(result);
输出

58

模式
-?\d+
表示匹配一组一个或多个数字,前面可能有连字符。可以在文档中找到更多信息。

很明显,如果一次将数字加一,则无法获得34这样的数字。您需要跟踪遇到的连续数字,并且仅当遇到非数字或字符串结尾时,才将它们添加到总和中

int sum = 0;

int currentValue = 0;
boolean negative = false;

for (int i = 0; i < text.length(); i++) {
    char c = text.charAt(i);
    if (Character.isDigit(c)) {
        int digitValue = Character.getNumericValue(text.charAt(i));

        currentValue = currentValue * 10;

        if (negative) {
            currentValue = currentValue - digitValue;
        } else {
            currentValue = currentValue + digitValue;
        }
    } else {
        sum = sum + currentValue;
        currentValue = 0;
        negative = (c == '-');
    }
}

sum = sum + currentValue;

return sum;
int和=0;
int currentValue=0;
布尔负=假;
对于(int i=0;i
解决方案当然有效。但是OP是初学者,不会学习如何处理问题,也不会学习如何思考。这就是为什么你的答案没有帮助。我不认为2.05是整数。@2题和05题中的WJS被视为两个不同的数字。你是对的。“头衔和其他人之间的另一个冲突。”门塔勒格说,就答案而言,这艘船很久以前就已经航行了。这就是为什么论坛更适合帮助新朋友,因为你可以与他们保持对话。有人告诉我,评论不适合这样做。