Подтвердить что ты не робот

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

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

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

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

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

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

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

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

              5
             +9

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

4b9b3361

Ответ 1

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

Чтобы это сработало, я собираюсь взять несколько вещей о тексте TextView:

  • TextView состоит из строк, разделенных символом "\n".
  • Первая строка не включает оператор (+, -, * или /).
  • После первой строки может быть переменное число строк в TextView, которое будет включать в себя оператор один и один.
  • Оператор всегда будет первым 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() );
}

ИЗМЕНИТЬ

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

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

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.

Ответ 2

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

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

Ответ 3

расщепляется знаком + таким образом

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

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

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

Ответ 4

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

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;

Ответ 5

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

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