Как получить текст из текстового поля

Если я задал текст в текстовом виде таким образом, что не проблема:

tv.setText("" + ANS[i]); 

Это просто получается с этого пути.

  String a = tv.getText().toString(); int A = Integer.parseInt(a); 

Но в случае установки значения в textView.

  tv1.setText(" " + X[i] + "\n" + "+" + " " + Y[i]); 

Который подобен этому

  5 +9 

У меня проблема, это значение, как получить.

Solutions Collecting From Web of "Как получить текст из текстового поля"

Я не тестировал это, но он должен дать вам общее представление о том направлении, которое вам нужно предпринять.

Чтобы это сработало, я собираюсь кое-что TextView о тексте TextView :

  1. TextView состоит из строк, разделенных символом "\n" .
  2. Первая строка не будет содержать оператора (+, -, * или /).
  3. После первой строки в TextView может быть переменное количество строк, которое будет включать в себя один оператор и одно число.
  4. Оператор всегда будет первым Char линии.

Сначала мы получаем текст:

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

Затем мы разделим его на каждую строку:

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

Теперь нам нужно вычислить общее значение:

 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 ); } 

Метод расчета должен выглядеть так, предполагая, что мы знаем, что первым Char строки является оператор:

 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() ); } 

РЕДАКТИРОВАТЬ

Таким образом, вышеизложенное, как указано в комментарии ниже, выполняет «слева направо» расчет, игнорируя нормальный порядок (+ и / before + и -).

Ниже приведен правильный расчет:

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

Метод getValue является рекурсивным методом, и он должен выглядеть так:

 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 ); } 

Особые случаи, которые рекурсивный метод не обрабатывает:

  • Если первое число отрицательно, например, -3 + 5 * 8.
  • Двойные операторы, например, 3 * -6 или 5 / -4.

Также тот факт, что мы используем Integers может дать некоторые «нечетные» результаты в некоторых случаях, например, 5/3 = 1.

Попробуй вот так.

 tv1.setText(" " + Integer.toString(X[i]) + "\n" + "+" + " " + Integer.toString(Y[i])); 

Вы должны сделать следующее:

 a=a.replace("\n"," "); a=a.trim(); String b[]=a.split("+"); int k=Integer.ValueOf(b[0]); int l=Integer.ValueOf(b[1]); int sum=k+l; 

Раскол с знаком + таким образом

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

Теперь преобразуем массив

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

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

  final String string = " " + 5 + "\n" + "-" + " " + 9+"\n"+"+"+" "+5; //Or get the value from a TextView final Pattern pattern = Pattern.compile("(-?).?(\\d+)"); Matcher matcher = pattern.matcher(string); System.out.print(string); System.out.print('\n'); int sum = 0; while( matcher.find() ){ System.out.print(matcher.group(1)); System.out.print(matcher.group(2)); System.out.print('\n'); sum += Integer.parseInt(matcher.group(1)+matcher.group(2)); } System.out.print("\nSum: "+sum); 

Этот код печатает следующее:

  5 - 9 + 5 5 -9 5 Sum: 1 

Изменить: извините, если я неправильно понял ваш вопрос, было немного непонятно, что вы хотели сделать. Я предположил, что вы хотите получить сумму чисел как целое, а не строку.

Edit2: чтобы номера были отделены друг от друга, сделайте что-то вроде этого:

  final String string = " " + 5 + "\n" + "-" + " " + 9+"\n"+"+"+" "+5; //Or get the value from a TextView final Pattern pattern = Pattern.compile("(-?).?(\\d+)"); Matcher matcher = pattern.matcher(string); ArrayList<Integer> numbers = new ArrayList<Integer>(); while( matcher.find() ){ numbers.add(Integer.parseInt(matcher.group(1)+matcher.group(2))); }