2011-12-15 21 views
28

si he fijado texto en TextView de tal manera, que no es un problema:cómo obtener el texto de Vista de Texto

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

esto simplemente recibiendo de esta manera.

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

Pero en caso de establecer valor en textView.

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

que es como esta

   5 
      +9 

tengo problema, este valor como llegar.

+0

¿Quieres mostrar el resultado de la suma de esos números ..? – Mudassir

+1

¿cuál es el problema? – freshDroid

+0

mi pregunta es, tengo valor de 5 + 9 en una vista de texto como ya lo mencioné. Entonces, ¿cómo obtener este valor como tv.getText(). ToString(); –

Respuesta

34

no he t probado esto, pero debería darle una idea general de la dirección que necesitas tomar.

Para que esto funcione, voy a asumir algunas cosas sobre el texto de la TextView:

  1. El TextView consiste en líneas delimitadas con "\n".
  2. La primera línea no incluirá un operador (+, -, * o /).
  3. Después de la primera línea no puede haber un número variable de líneas en el TextView que serán todos incluir uno operador y uno número.
  4. Un operador siempre será el primero Char de una línea.

En primer lugar tenemos el texto:

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

Luego Dividimos que para cada línea:

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

Ahora tenemos que calcular el valor total:

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

El método calcular debería verse así, suponiendo que conocemos el primer Char de una línea es el operador:

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

EDITAR

Así lo anterior como se indica en el comentario anterior significa "izquierda a derecha" de cálculo, haciendo caso omiso de la orden normal (+ y/antes + y -).

A continuación se hace el cálculo de la manera correcta:

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

El método getValue es un método recursivo y debería tener este aspecto:

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

casos especiales que el método recursivo no maneja :

  • Si el primer número es negativo, por ejemplo -3 + 5 * 8.
  • Operadores dobles, p. 3 * -6 o 5/-4.

También el hecho de que estamos usando Integers puede dar algunos resultados "extraños" en algunos casos, como p. 5/3 = 1.

+0

Esto no va a funcionar muy bien. Considere la situación siguiente: 5 + 5 * 3 El resultado real es 20 (5 + 5 * 3 = 5 + 15 = 20), pero su código opera estrictamente de izquierda a derecha ignorando el hecho de que la multiplicación/división debe tratarse primero y da 30 (5 + 5 * 3 = 10 * 3 = 30). – Jave

+0

Por eso dije: "pero debería darle una idea general de la dirección que debe tomar". – kaspermoerch

+0

Sí, simplemente lo señala para que nadie se confunda cuando no funciona como esperaban (ya que afirmó que no lo había probado). – Jave

0

Probar como esto.

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

él quiere el valor de la vista de texto no establecida en la vista de texto que ya estableció el valor en la vista de texto – Pratik

0

ruptura con el signo + al igual que de esta manera

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

ahora convertir la matriz

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

Cadena a tv.getText(). ToString(); , esto es que no entiendo –

+0

lo siento es error de impresión – Pratik

+0

tienes que reemplazar "\ n" con el "" y luego recortar la cadena después de que dividir la cadena – Pratik

0

Tienes que hacer lo siguiente:

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

Si es la suma de todos los números que desea, hice un pequeño fragmento para usted que puede manejar tanto + como - usando una expresión regular (dejé algunas llamadas impresas para ayudar visualizar lo que sucede):

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

Este código imprime el siguiente:

5 
- 9 
+ 5 
5 
-9 
5 

Sum: 1 

Edit: lo siento si no he entendido bien su pregunta, que era un poco más claro lo que quería hacer. Supuse que querías obtener la suma de los números como un número entero en lugar de una cadena.

Edit2: para obtener los números separados unos de otros, hacer algo como esto en su lugar:

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