2013-11-22 5 views
1

Скажем, у меня есть строка 3 + 4 = 7 или 23 - 4 = 19. Мне интересно, как я собираюсь получить последнее целое число из строки, чтобы его можно было сравнить с другим int.Получение последнего целого из строки

Ive использовал этот код:

int first = Integer.parseInt(str.substring(0, str.indexOf(" "))); 
int second = Integer.parseInt(result.substring(result.indexOf('+')+1 , result.indexOf('='))); 

, чтобы получить первое и второе целые числа для вычислений, но я не могу показаться, чтобы получить последнее число в строке, когда я использую метод выше. Это что-то, что я делаю неправильно или есть что-то еще, что мне нужно делать?

Я также не могу использовать массивы, регулярное выражение, try/catch или SystemTokenizer.

И мои строки не всегда будут в формате a + b = c с пробелами или целым числом в одну цифру. строки берутся из текстового файла, который импортируется сканером. Вот пример из уравнений в файле:

11 - 2 = 9 
12 - 1 = 11 
7 + 1 = 8 
7 - 3 = 4 
7 + 2 = 9 
14 + 4 = 18 
+0

Будут ли ваши строки всегда быть в формате 'а + б = c' ? – Kon

+0

Если из приведенного выше примера вам нужно получить 7, то: 'int first = Integer.parseInt (str1.substring (str1.lastIndexOf (" ") +1));' – Ashish

+0

Вы можете использовать charAt() с циклом for правильно?? – TheLostMind

ответ

3

Если все строки в этом формате - a + b = c, то есть простой способ -

String[] parts = str.split("="); 
String lastDigit = parts[parts.length - 1].trim(); 
int last = Integer.parseInt(lastDigit); 

Отъезд docs.

Update

Согласно вашему требованию, не желая использовать регулярное выражение, вы можете сделать что-то вроде этого -

public int getLastDigit(String expression) { 
    StringBuffer result = new StringBuffer(); 

    for (int i = expression.length() - 1; i >= 0; i--) { 
     char c = expression.charAt(i); 

     if (c == '=') { 
      break; 
     } 
     else { 
      result.append(c); 
     } 
    } 

    return Integer.parseInt(result.reverse() 
     .toString() 
     .trim()); 
} 

int last = getLastDigit("1 + 3 = 14"); 
System.out.println(last);  // will print 14 
+1

Разве это не массив? – CherryBomb95

+0

Он также использует регулярное выражение, и я не могу использовать его ни по требованию моего инструктора. – CherryBomb95

+0

@ CherryBomb95: Смотрите мое обновление. –

0

Это будет работать намного проще:

String[] tokens = str.Split(" "); 
int first = Integer.parseInt(tokens[0]); 
int second = Integer.parseInt(tokens[1]); 
int last = Integer.parseInt(tokens[3]); 

В противном случае без массивов используйте lastIndexOf:

int last = Integer.parseInt(str.substring(str.lastIndexOf(" "), str.length())); 
+0

Почему-то пользователь сказал, что он не может использовать массивы. что ты говоришь? – Ashish

+0

@Ashish: вот почему я также дал второй вариант, который не использует массивы. –

+0

Yeap Я заметил, что второй ответ не загрузился, когда я поставил этот комментарий. мои извинения! – Ashish

0

простое использование раскол и получить индекс [1], чтобы получить последнее число в строке просто разделить с «=»

0

ли эта работа?

int last = Integer.parseInt(str.substring(str.indexOf("=") + 1, str.length)); 

Идея состоит в том, чтобы получить индекс «=», а затем проанализировать подстроку там до конца. Я сделал «str.indexOf (« = ») + 1», чтобы он не включал «знак».

+0

Это дало мне ошибку, когда я попробовал. – CherryBomb95

+0

Плохо я понял, что в конце концов забыл круглую скобку. Дайте мне знать, если это работает сейчас. (И какая ошибка, если не нравится) – Gino

+0

Исключение в потоке «main» java.lang.NumberFormatException: для строки ввода: «19» \t at java.lang.NumberFormatException.forInputString (Неизвестный источник) \t at java.lang .Integer.parseInt (Неизвестный источник) \t at java.lang.Integer.parseInt (Неизвестный источник) – CherryBomb95

0
String [] tokens = str.split("="); 
String finalDigit = tokens[tokens.length-1]; 
0
import java.io.*; 
class GetString{ 
publice static void main(String []args) 
{ 
    string str,int x; 
    Scanner s = new Scanner(input).useDelimiter("\n"); //take each line 
    while((str=s.next())!=NULL) 
    { 
     str.trim(); 
     int first = Integer.parseInt(str.substring(0, str.indexOf(" "))); 
     //Depending on weather the sign is '+' or '-' it will take the index of that 
     int second = Integer.parseInt(str.substring((x=str.indexOf('+')>-1? 
         str.indexOf('+'):str.indexOf('-'))+1 , result.indexOf('='))); 
     int Third= Integer.parseInt(str.substring(str.indexOf("="), str.Length-1)) 

    } 

    s.close(); 
    } 
} 

Его общая идея не идеальный code.Edits и предложения приветствуются.

+0

К сожалению, справа может быть расстояние, поэтому оно просто возвращает ошибку. – CherryBomb95

+0

являются частью уравнения одной большой строки? Если да, то у них есть разделитель? –

+0

Несколько. Существует несколько уравнений, которые сканируются из текстового файла. – CherryBomb95

0

Вам нужно будет обрезать извлеченную цифру, другие мудры можно бросить

Исключения в потоке «основной» java.lang.NumberFormatException: Для ввода строки: «7»

Чтобы извлечь последнюю цифру, вы можете следовать ниже код

String str1="3 + 4 = 7"; 
String str2= str1.substring(str1.lastIndexOf("=")+1).trim(); 
int i = Integer.parseInt(str2); 
+0

Он по-прежнему выдает ошибку – CherryBomb95

+0

Какая ошибка, которую вы получаете над линиями, тестируется локально –

+0

По сути, ошибка говорит о том, что между символом = и цифрой все еще есть пробел. – CherryBomb95

Смежные вопросы