web-dev-qa-db-fra.com

comment obtenir du texte à partir de textview

si j'ai mis le texte dans textview de cette manière, ce qui n'est pas un problème:

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

ceci simplement en venant de cette façon.

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

Mais en cas de réglage de la valeur dans textView.

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

qui est comme ça

              5
             +9

J'ai un problème, cette valeur, comment l'obtenir.

31
Dharma Kshetri

Je n'ai pas testé cela - mais cela devrait vous donner une idée générale de la direction que vous devez prendre.

Pour que cela fonctionne, je vais supposer quelques choses à propos du texte de TextView:

  1. Le TextView est constitué de lignes délimitées par "\n".
  2. La première ligne n'inclura pas d'opérateur (+, -, * ou /).
  3. Après la première ligne, il peut y avoir un nombre variable de lignes dans TextView qui incluront toutes n opérateur et n nombre.
  4. Un opérateur sera toujours le premier Char d'une ligne.

Nous obtenons d'abord le texte:

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

Ensuite, nous le divisons pour chaque ligne:

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

Maintenant, nous devons calculer la valeur totale:

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

La méthode de calcul devrait ressembler à ceci, en supposant que nous savons que le premier Char d'une ligne est l'opérateur:

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

Ainsi, ce qui précède, comme indiqué dans le commentaire ci-dessous, effectue un calcul "de gauche à droite", en ignorant l'ordre normal (+ et/avant + et -).

Ce qui suit fait le calcul dans le bon sens:

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

La méthode getValue est une méthode récursive et devrait ressembler à ceci:

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

Cas spéciaux que la méthode récursive ne gère pas:

  • Si le premier nombre est négatif, par exemple, -3 + 5 * 8.
  • Opérateurs doubles, par exemple 3 * -6 ou 5/-4.

De plus, le fait que nous utilisions Integers pourrait donner des résultats "impairs" dans certains cas, par exemple. 5/3 = 1.

47
kaspermoerch

diviser avec le signe + comme ceci

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

maintenant convertir le tableau

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

Si c'est la somme de tous les nombres que vous voulez, j'ai créé pour vous un petit extrait qui peut gérer à la fois les + et - en utilisant une expression régulière (j'ai laissé des appels d'impression à l'intérieur pour aider à visualiser ce qui se passe):

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

Ce code imprime ce qui suit:

  5
- 9
+ 5
5
-9
5

Sum: 1

Edit: désolé si j'ai mal compris votre question, il était un peu difficile de savoir ce que vous vouliez faire. J'ai supposé que vous vouliez obtenir la somme des nombres sous la forme d'un entier plutôt que d'une chaîne.

Edit2: pour séparer les numéros les uns des autres, procédez comme suit:

    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
Jave

Essayez comme ça.

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

Vous devez faire ce qui suit:

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
Mohamed_AbdAllah