как получить текст из textview - PullRequest
30 голосов
/ 15 декабря 2011

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

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

это просто получается таким образом.

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

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

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

, как это

              5
             +9

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

Ответы [ 5 ]

46 голосов
/ 15 декабря 2011

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

Чтобы это сработало, я собираюсь предположить несколько вещей о тексте 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() );
}

EDIT

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

Правильно рассчитывается следующее:

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.

1 голос
/ 15 декабря 2011

разделить со знаком + таким образом

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

теперь конвертируем массив

Integer.parseInt(aa[0]); // and so on
0 голосов
/ 15 декабря 2011

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

    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)));
    }
0 голосов
/ 15 декабря 2011

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

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;
0 голосов
/ 15 декабря 2011

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

tv1.setText("  " + Integer.toString(X[i]) + "\n" + "+" + " " + Integer.toString(Y[i]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...