从String中提取数字并添加它们

时间:2017-10-06 13:37:40

标签: java arrays string

对于我的学校,我必须创建一个add函数,可以添加2个数字。

示例:/add 6 4
解决方案:10

这是我目前的代码,它允许我这样做,但最多只有/add 9 9

String stString = message_text;
String number = stString.replaceAll("[^0-9]", "");
int numArr[] = new int[2];
for (int i = 0; i<2; i++) {
    numArr[i] = Integer.parseInt(String.valueOf(number.charAt(i)));
}

int sum = IntStream.of(numArr).sum();

我需要一种能够使用/add 14 23左右的方法。

6 个答案:

答案 0 :(得分:2)

为什么不使用这样的分割:

String[] myValues = stString.split(" ");

然后通过myValues [1]和myValues [2]

获取值

答案 1 :(得分:1)

不能为你写作业,但要看你的逻辑。如果您只阅读一个字符,则只能有一个数字。

解析多位数输入而不是使用charAt()。采取一些额外的代码行来收集和构建您的输入。尝试String.substring()String.split()并从那里开始工作。

答案 2 :(得分:1)

由于您已经在使用流,因此您可以制作一个仅限流的流解决方案:

int sum = Stream.of(stString.split(" ")).
    skip(1).
    mapToInt(Integer::parseInt).
    sum();

答案 3 :(得分:0)

您的问题是,您使用replace()String.valueOf()IntStream.of(numArr).sum()使问题太复杂,然后您将程序限制为只读取一个字符,因此您的数字将始终为仅由一位数组成。

<强>解决方案:

您只需使用.split()方法并将空格作为分隔符传递给它:

String stString = "/add 64 10";
int a = Integer.parseInt(stString.split(" ")[1]);
int b = Integer.parseInt(stString.split(" ")[2]);
System.out.println(a+b); //will print 74

答案 4 :(得分:0)

您的方法存在的问题是,您将String中所需数字的索引与String中的实际索引混淆。 基本上你想要两个数字,但你总是在替换后连续找两个数字。

解决此问题的一种方法是使用简单的正则表达式来获取1+数字序列并收集它们。

例如:

String[] test = {
        "/add 1 2",
        "/add 22 20"
    };
Pattern digits = Pattern.compile("\\d+");
for (String s: test) {
    // parsing after /add
    String sequence = s.substring(4);
    // matching digits
    Matcher m = digits.matcher(sequence);
    // finding as many numbers as possible - you can always hard-limit to 2 if needed
    long sum = 0;
    while (m.find()) {
        // no need to check parsing, it will always be integer figures at this point
        sum += Integer.parseInt(m.group());
    }
    System.out.println(sum);
}

<强>输出

3
42

答案 5 :(得分:0)

您可以使用拆分字符串,然后将片段转换为数字:

    String stString = "/add 14 56";
    String[] fragments = stString.split(" ");
    int sum = 0;
    // Start from fragment 1 assuming that fragment 0 is "/add"
    for (int i = 1; i < fragments.length; i++)
        try {
            sum += Integer.valueOf(fragments[i]);
        } catch (Exception e) {
            System.err.println("Something went wrong converting the strings into integers.");
            System.err.println("Please check the input string.");
            System.err.println("\n");
            e.printStackTrace();
            break;
        }