#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);
Объяснение:
- Здесь мы используем регулярное выражение, чтобы проверить, содержит ли разбиение строки только цифры.
- Теперь мы перевернем строку, а затем проанализируем ее до значения 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
это действительно перебор для этой задачи.