how to get text from textview

I haven't tested this - but it should give you a general idea of the direction you need to take.

For this to work, I'm going to assume a few things about the text of the TextView:

  1. The TextView consists of lines delimited with "\n".
  2. The first line will not include an operator (+, -, * or /).
  3. After the first line there can be a variable number of lines in the TextView which will all include one operator and one number.
  4. An operator will allways be the first Char of a line.

First we get the text:

String input = tv1.getText().toString();

Then we split it up for each line:

String[] lines = input.split( "\n" );

Now we need to calculate the total value:

int total = Integer.parseInt( lines[0].trim() ); //We know this is a number.

for( int i = 1; i < lines.length(); i++ ) {
   total = calculate( lines[i].trim(), total );
}

The method calculate should look like this, assuming that we know the first Char of a line is the operator:

private int calculate( String input, int total ) {
   switch( input.charAt( 0 ) )
      case '+':
         return total + Integer.parseInt( input.substring( 1, input.length() );
      case '-':
         return total - Integer.parseInt( input.substring( 1, input.length() );             
      case '*':
         return total * Integer.parseInt( input.substring( 1, input.length() );             
      case '/':
         return total / Integer.parseInt( input.substring( 1, input.length() );
}

EDIT

So the above as stated in the comment below does "left-to-right" calculation, ignoring the normal order ( + and / before + and -).

The following does the calculation the right way:

String input = tv1.getText().toString();
input = input.replace( "\n", "" );
input = input.replace( " ", "" );
int total = getValue( input );

The method getValue is a recursive method and it should look like this:

private int getValue( String line ) {
  int value = 0;

  if( line.contains( "+" ) ) {
    String[] lines = line.split( "\\+" );
    value += getValue( lines[0] );

    for( int i = 1; i < lines.length; i++ )
      value += getValue( lines[i] );

    return value;
  }

  if( line.contains( "-" ) ) {
    String[] lines = line.split( "\\-" );
    value += getValue( lines[0] );

    for( int i = 1; i < lines.length; i++ )
      value -= getValue( lines[i] );

    return value;
  }

  if( line.contains( "*" ) ) {
    String[] lines = line.split( "\\*" );
    value += getValue( lines[0] );

    for( int i = 1; i < lines.length; i++ )
      value *= getValue( lines[i] );

    return value;
  }

  if( line.contains( "/" ) ) {
    String[] lines = line.split( "\\/" );
    value += getValue( lines[0] );

    for( int i = 1; i < lines.length; i++ )
      value /= getValue( lines[i] );

    return value;
  }

  return Integer.parseInt( line );
}

Special cases that the recursive method does not handle:

  • If the first number is negative e.g. -3+5*8.
  • Double operators e.g. 3*-6 or 5/-4.

Also the fact the we're using Integers might give some "odd" results in some cases as e.g. 5/3 = 1.


split with the + sign like this way

String a = tv.getText().toString();
String aa[];
if(a.contains("+"))
    aa = a.split("+");

now convert the array

Integer.parseInt(aa[0]); // and so on