如何编写一个java方法,将每个数字的数字添加到字符串中

如何编写一个java方法,将每个数字的数字添加到字符串中,java,Java,我正在进行一项挑战,要求我们输入一个包含数字的字符串。例如,“这个23字符串有738个数字” 该方法需要将2+3的值相加以返回5,将7+3+8的值相加以返回18 但我不知道如何循环查找输入字符串中的每个数字,执行该操作,然后继续遍历字符串的其余部分。有什么建议或解决办法吗 一个成功的方法将字符串作为输入,如“This23stringhas34或cat48”,该方法将返回5、7和12 我已经知道如何使用正则表达式从字符串中提取数字,但我不知道如何将提取出的每个数字的数字添加到输出中 包装反向试验

我正在进行一项挑战,要求我们输入一个包含数字的字符串。例如,“这个23字符串有738个数字”

该方法需要将2+3的值相加以返回5,将7+3+8的值相加以返回18

但我不知道如何循环查找输入字符串中的每个数字,执行该操作,然后继续遍历字符串的其余部分。有什么建议或解决办法吗

一个成功的方法将字符串作为输入,如“This23stringhas34或cat48”,该方法将返回5、7和12

我已经知道如何使用正则表达式从字符串中提取数字,但我不知道如何将提取出的每个数字的数字添加到输出中

包装反向试验

import java.util.Scanner;
public class ExtractNumbers {`enter code here`
      public static void main(String[] args) 
      {
          String str;
          String numbers;

          Scanner SC=new Scanner(System.in);

          System.out.print("Enter string that contains numbers: ");
          str=SC.nextLine();

          //extracting string
          numbers=str.replaceAll("[^0-9]", "");

          System.out.println("Numbers are: " + numbers);
      }
}
这会将字符串中的所有数字相加:

String a="jklmn489pjro635ops";

    int sum = 0;

    String num = "";

    for(int i = 0; i < a.length(); i++) {
        if(Character.isDigit(a.charAt(i))) {
            num = num + a.charAt(i);
        } else {
            if(!num.equals("")) {
                sum = sum + Integer.parseInt(num);
                num = "";
            }
        }
    }
    System.out.println(sum);
}
String a=“jklmn489pjro635ops”;
整数和=0;
字符串num=“”;
对于(int i=0;i

我不知道如何将此代码与可以将此方法输出的数字相加的代码结合起来。

我们可以尝试使用Java的正则表达式引擎,使用模式
\d+
。然后我们可以一个字符一个字符地迭代每个匹配字符,并计算总和

String a = "This 23 string has 738 numbers";
String pattern = "\\d+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(a);
while (m.find()) {
    System.out.print("found numbers: " + m.group(0) + " = ");
    int sum = 0;
    for (int i=0; i < m.group(0).length(); ++i) {
        sum += m.group(0).charAt(i) - '0';
    }
    System.out.println(sum);
}

您可以简单地
split
将输入字符串拆分为单独的标记,然后
split
将每个标记只包含数字:

String s = "This 23 string has 738 numbers";
String[] st = s.split(" ");
for (int i=0 ; i<st.length ; i++) {
    if (st[i].matches("[0-9]+")) {
        String[] c = st[i].split("(?=\\d)");
        int sum = 0;
        for(int j=0 ; j<c.length ; j++) {
            sum += Integer.parseInt(c[j]);
        }
        System.out.println(sum);

    }
}

在中断了20年之后,我正在重新学习Java,同时评估BlueJ是否可以在我的课堂上使用。这似乎是一个伟大的项目来实践,所以谢谢你的帖子!以下是我对它的看法,不使用正则表达式

类FindDigits:

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class FindDigits
{

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter string to analyze: ");
        String input = scan.nextLine();

        FindDigits fd = new FindDigits(input);
        System.out.println("Input: " + fd.getInput());
        List<NumberSum> results = fd.getSums();
        if (results.size() > 0)
        {
            for(NumberSum ns: results)
            {
                System.out.println("Number: " + ns.getNumber() + ", Sum: " + ns.getSum());
            }
        }
        else
        {
            System.out.println("No numbers found.");
        }
    }

    private String _input;
    public String getInput()
    {
        return _input;
    }

    public FindDigits(String input)
    {
        _input = input;
    }

    private List<String> getNumbers()
    {
        List<String> numbers = new ArrayList();
        String curNumber = "";
        for(Character c: getInput().toCharArray())
        {
            if(Character.isDigit(c))
            {
                curNumber = curNumber + c;
            }
            else
            {
                if (!curNumber.isEmpty())
                {
                    numbers.add(curNumber);
                    curNumber = "";
                }
            }
        }
        if (!curNumber.isEmpty())
        {
            numbers.add(curNumber);
        }
        return numbers;
    }

    public List<NumberSum> getSums()
    {
        List<NumberSum> sums = new ArrayList<NumberSum>();
        for(String number: getNumbers())
        {
            sums.add(new NumberSum(number));
        }
        return sums;
    }

}
输出:

当你用这个正则表达式替换所有时,你也在用空字符串替换空格,所以这个字符串:“这个23字符串有738个数字”将变为:“23738”,你将无法知道第一个数字在哪里结束,下一个数字从哪里开始。首先不要替换空格,然后拆分空格上的字符串并分别解析每个数字。从这里开始,实现你的目标应该不是很难。你需要一些代码来获取文本中的数字,还是需要知道如何组合这两种代码?显示代码的最小化部分我认为代码的第一位提取数字。我需要代码来获取这些数字,并将它们的数字相加,然后返回这些值。任何帮助都将不胜感激。为什么不把第二位代码转换成一个函数,并在系统输入读取调用第一位代码时调用它呢?但他说:“一个成功的方法会将字符串作为输入,比如“This 23 string has 34 or cat 48”,该方法将返回5、7和12。”所以在“jklmn489pjro635ops”中应该返回21和14否?谢谢你指出这一点。我已经更新了答案。请使用
。等于而不是
=用于字符串比较。@罗伯特,谢谢!例如,
!getNumber()等于(“”
?要在Java和.Net之间来回切换而不出错,需要一段时间。@Robert转而使用
isEmpty()
。adfsadfsddasdf
5
18
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class FindDigits
{

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter string to analyze: ");
        String input = scan.nextLine();

        FindDigits fd = new FindDigits(input);
        System.out.println("Input: " + fd.getInput());
        List<NumberSum> results = fd.getSums();
        if (results.size() > 0)
        {
            for(NumberSum ns: results)
            {
                System.out.println("Number: " + ns.getNumber() + ", Sum: " + ns.getSum());
            }
        }
        else
        {
            System.out.println("No numbers found.");
        }
    }

    private String _input;
    public String getInput()
    {
        return _input;
    }

    public FindDigits(String input)
    {
        _input = input;
    }

    private List<String> getNumbers()
    {
        List<String> numbers = new ArrayList();
        String curNumber = "";
        for(Character c: getInput().toCharArray())
        {
            if(Character.isDigit(c))
            {
                curNumber = curNumber + c;
            }
            else
            {
                if (!curNumber.isEmpty())
                {
                    numbers.add(curNumber);
                    curNumber = "";
                }
            }
        }
        if (!curNumber.isEmpty())
        {
            numbers.add(curNumber);
        }
        return numbers;
    }

    public List<NumberSum> getSums()
    {
        List<NumberSum> sums = new ArrayList<NumberSum>();
        for(String number: getNumbers())
        {
            sums.add(new NumberSum(number));
        }
        return sums;
    }

}
public class NumberSum
{

        private String _number;
        public String getNumber()
        {
            return _number;
        }

        public NumberSum(String number)
        {
            _number = number;
            for(char c: number.toCharArray())
            {
                if(!Character.isDigit(c))
                {
                    _number = "";
                    break;
                }
            }
        }

        public int getSum()
        {
            return sum(getNumber());
        }

        private int sum(String number)
        {
            if (!getNumber().isEmpty())
            {
                int total = 0;
                for(char c: number.toCharArray())
                {
                    total = total + Character.getNumericValue(c);
                }
                return total;
            }
            else
            {
                return -1;   
            }
        }

}