if I have set text in textview in such way, which is not problem:
tv.setText("" + ANS[i]);
this simply getting from this way.
String a = tv.getText().toString(); int A = Integer.parseInt(a);
But in case of setting value in textView.
tv1.setText(" " + X[i] + "\n" + "+" + " " + Y[i]);
which is like this
5 +9
I have problem , this value how to get.
Select + copy text in a TextView? Generally, we can copy / paste the value from EditText by long click. It is an in-build functionality for Android.
To access the TextView present in a layout file, from Kotlin file, use findViewById() method with the TextView id passed as argument. The attribute id will help to find the specified widget.
SetText(String, TextView+BufferType) Sets the text to be displayed using a string resource identifier.
A TextView displays text to the user and optionally allows them to edit it. A TextView is a complete text editor, however the basic class is configured to not allow editing.
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
:
TextView
consists of lines delimited with "\n"
.TextView
which will all include one operator and one number.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:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With