反转并求和字符串中出现的数字-Java

时间:2019-03-25 16:19:02

标签: java string

我想编写一个将数字反转然后求和的函数。 例如,输入字符串是

  

我们有38位房间的55位客人

所以预期的输出应该是

83 + 55 = 138

我遇到一个问题,就是我看不清最后一个号码 例: 输入字符串为“ 8个人” 输出为0

这是我编写的代码:

int total = 0;
String num = "";
String a = input.nextLine();

for (int i = a.length() - 1; i > 0; i--) {
    if (Character.isDigit(a.charAt(i))) {
        num += a.charAt(i);

        if (!Character.isDigit(a.charAt(i - 1))) {
            total += Integer.valueOf(num);
            num = "";
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您真正需要做的就是:

String input = "We have 55 guests in room 38";
int sum = 0;

String[] split = input.split(" ");       // split based on space
for (int i = 0; i < split.length; i++) {
    if (split[i].matches("[0-9]+")) {
        sum = sum + Integer.parseInt(new StringBuffer(split[i]).reverse().toString());
    }
}

System.out.println(sum);

说明:

  1. 在这里,我们使用 regex 检查字符串拆分是否仅包含 数字。
  2. 现在我们反转 String ,然后将其解析为int 总结。

答案 1 :(得分:0)

尝试此操作,并以“我们在y个房间中有x位客人”的形式进行任何输入。但是对于您的程序,如果for循环> 0做> -1,我认为:

Scanner scan = new Scanner(System.in);
scan.next(); scan.next();
String numberOne = "" + scan.nextInt();
scan.next(); scan.next(); scan.next();
String numberTwo = "" + scan.nextInt();
// String numberOne = "" + scan.nextInt(), numberTwo = "" + scan.nextInt();
String numberOneReversed = "", numberTwoReversed = "";

for(int k = numberOne.length() - 1; k > -1; k--)
    numberOneReversed += numberOne.charAt(k);
for(int k = numberTwo.length() - 1; k > -1; k--)
    numberTwoReversed += numberTwo.charAt(k);

int sum = Integer.parseInt(numberOneReversed) + Integer.parseInt(numberTwoReversed);
System.out.println("" + numberOneReversed + " + " + numberTwoReversed + " = " + sum);
scan.close();

问题中定义的程序注释:

for (int i = a.length() - 1; i > -1; i--) {

代替

for (int i = a.length() - 1; i > 0; i--) {

if (i != 0 && !Character.isDigit(a.charAt(i - 1))) {

代替

for (int i = a.length() - 1; i > 0; i--) {

将正确返回总和。

答案 2 :(得分:0)

好的,这是我使用BigIntegers而不是ints创建的:

public static BigInteger nameOfFunctionGoesHere(String input) {
    BigInteger total = new BigInteger(new byte[] {0});
    int i = 0;
    while (i < input.length()) {
        if (Character.isDigit(input.charAt(i))) {
            int j = i + 1;
            while (!(j >= input.length()) && Character.isDigit(input.charAt(j))) {
                j++;
            }
            String num = input.substring(i, j);
            char[] flipped = new char[num.length()];
            for (int n = num.length() - 1; n >= 0; n--) {
                flipped[n] = num.charAt(num.length() - (n + 1));
            }
            total = total.add(new BigInteger(new String(flipped)));
            i = j;
        } else {
            i++;
        }
    }
    return total;
}

您当然也可以使用整数:

public static int nameOfFunctionGoesHere(String input) {
    int total = 0;
    int i = 0;
    while (i < input.length()) {
        if (Character.isDigit(input.charAt(i))) {
            int j = i + 1;
            while (!(j >= input.length()) && Character.isDigit(input.charAt(j))) {
                j++;
            }
            String num = input.substring(i, j);
            char[] flipped = new char[num.length()];
            for (int n = num.length() - 1; n >= 0; n--) {
                flipped[n] = num.charAt(num.length() - (n + 1));
            }
            total = total + Integer.parseInt(new String(flipped));
            i = j;
        } else {
            i++;
        }
    }
    return total;
}

也很渴望:

public static long nameOfFunctionGoesHere(String input) {
    long total = 0;
    int i = 0;
    while (i < input.length()) {
        if (Character.isDigit(input.charAt(i))) {
            int j = i + 1;
            while (!(j >= input.length()) && Character.isDigit(input.charAt(j))) {
                j++;
            }
            String num = input.substring(i, j);
            char[] flipped = new char[num.length()];
            for (int n = num.length() - 1; n >= 0; n--) {
                flipped[n] = num.charAt(num.length() - (n + 1));
            }
            total = total + Long.parseLong(new String(flipped));
            i = j;
        } else {
            i++;
        }
    }
    return total;
}