Переверните и суммируйте вхождение числа в строку — java

#java #string

#java #строка

Вопрос:

Я хотел бы написать функцию, которая будет переворачивать число, а затем суммировать его. Например, входная строка является

У нас 55 гостей в комнате 38

Таким образом, ожидаемый результат должен быть

 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 = "";
        }
    }
}
  

Комментарии:

1. Выполните цикл по строке, от конца к началу, объедините соседние цифры, преобразуйте их в числа и суммируйте их.

Ответ №1:

Все, что вам действительно нужно сделать, это :

 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. Здесь мы используем регулярное выражение, чтобы проверить, содержит ли разбиение строки только цифры.
  2. Теперь мы перевернем строку, а затем проанализируем ее до значения int перед суммированием.

Ответ №2:

Попробуйте это и сработает для любого ввода в форме «У нас x гостей в комнате y». Однако для вашей программы, вместо того, чтобы, если цикл 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 amp;amp; !Character.isDigit(a.charAt(i - 1))) {
  

вместо

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

Вернет сумму правильно.

Ответ №3:

Хорошо, вот что я создал, используя BigIntegers вместо целых чисел:

 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()) amp;amp; 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()) amp;amp; 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()) amp;amp; 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;
}
  

Комментарии:

1. BigInteger это действительно перебор для этой задачи.