2015-09-04 2 views
1

У меня возникли проблемы с правильной печатью этой строки. "34 + 23 * 15 + -10 // ** =? =". Он хранится в переменной с именем String; Я пытаюсь отделить каждый из разных типов переменных от разных токенов. Так, например, если я нахожу целые числа, я группирую их, если я нахожу символы, я их группирую.Возвращаемые целые числа из строки разных символов

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

if(Character.isDigit(input.charAt(i)) && Characted.isDigit(input.charAt(i+1)){ //checking for integers 
    count++; 
    temp = input.substring(input.charAt(i), input.charAt(i+1)); 
    count = Integer.parseInt(temp); 

    continue; 
} 
+0

Если у вас всегда есть натуральные числа, прочитайте каждую цифру и добавьте ее в строку, пока не найдете символ без цифры ('+' или '' и т. д.). целое число, если это произойдет. Это не очень хороший код, но он может помочь вам решить вашу задачу. – Tom

ответ

2

Вы должны взглянуть на regular expressions. Это пример того, как извлечь числа из строки:

 List<Integer> numbers = new ArrayList<Integer>(); 
     Pattern pattern = Pattern.compile("-?\\d+"); 
     Matcher matcher = pattern.matcher(str); 
     while (matcher.find()) { 
     numbers.add(Integer.valueOf(matcher.group())); 

Это работает даже для отрицательных чисел, и если я не ошибаюсь десятичные числа.

0

Вы спрашиваете, как написать цикл for?

int j; // Declaration outside for, so the variable persists 
for(j = i; Character.isDigit(input.charAt(j)); ++j); // Semicolon to do nothing in the loop, besides increasing j. 
if(j > i) 
{ 
    count = Integer.parseInt(input.substring(i, j)); 
    continue; 
} 

Я ушел из count++, потому что вы все равно перекрывая его, не уверен, что вы намеревались сделать там.

0

У вас здесь есть несколько вариантов. Вы можете изменить метод, который используете. Если вы сохраните номер до сих пор и делаете:

String numberSofar = ""; 
for(char c : inputString){ 
    if(Character.isDigit(c) 
     numberSoFar+=c; 
    else{ 
     digits+= Integer.parseInt(c); 
    } 
} 

Нечто похожее будет работать, но оно имеет несколько обратных сторон. Это довольно verbiose, и это довольно медленно (что, вероятно, не имеет значения, если у вас есть миллионы чисел, но все же ...).

Другой вариант - использовать регулярное выражение.

int sum = 0; 
    Pattern pattern = Pattern.compile("\\d+"); 
    Matcher matcher = pattern.matcher(str); 
    while (matcher.find()) { 
    sum += Integer.parseInt(matcher.group())); 

Однако, если вы на самом деле хотите, чтобы получить то, что это не число становится немного более сложным (или вы могли бы сделать две петли и просто посмотреть на противоположное тому, что вы смотрели в первый раз.^позволяет вам это сделать.