2011-12-15 2 views
28

se ho impostato testo in TextView in modo tale, che non è un problema:come ottenere il testo da TextView

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

questo semplicemente ottenere da questo modo.

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

Ma in caso di valore di impostazione in textView.

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

che è come questo

   5 
      +9 

Ho problema, questo valore come ottenere.

+0

Vuoi mostrare il risultato dell'addizione di quei numeri ..? – Mudassir

+1

qual è il problema ?? – freshDroid

+0

la mia domanda è, ho 5 + 9 valore in una vista testuale come già detto., Quindi come ottenere questo valore come tv.getText(). ToString(); –

risposta

34

Mi rifugio' Ho provato questo - ma dovrebbe darti un'idea generale di la direzione che devi seguire.

Per far funzionare tutto questo, ho intenzione di assumere alcune cose circa il testo del TextView:

  1. La TextView costituito da linee delimitate con "\n".
  2. La prima riga non include un operatore (+, -, * o /).
  3. Dopo la prima riga non ci può essere un numero variabile di righe nel TextView che saranno tutti includere uno operatore e uno numero.
  4. Un operatore sarà sempre il primo Char di una linea.

Per prima cosa ottenere il testo:

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

Poi abbiamo diviso in su per ogni linea:

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

Ora abbiamo bisogno di calcolare il valore 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); 
} 

Il metodo di calcolo dovrebbe assomigliare a questo, supponendo che conosciamo il primo Char di una linea è l'operatore:

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

Quindi il comando precedente come indicato nel commento qui sotto fa calcolo "da sinistra a destra", ignorando l'ordine normale (+ e/prima di + e -).

Quanto segue fa il calcolo nel modo giusto:

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

Il metodo getValue è un metodo ricorsivo e dovrebbe assomigliare a questo:

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

Casi particolari che il metodo ricorsivo non gestisce :

  • Se il primo numero è negativo, ad es. -3 + 5 * 8.
  • Doppi operatori, ad es. 3 * -6 o 5/-4.

Anche il fatto che stiamo usando Integers potrebbe dare alcuni risultati "dispari" in alcuni casi come ad es. 5/3 = 1.

+0

Questo non funzionerà molto bene. Si consideri il seguente scenario: 5 + 5 * 3 Il risultato effettivo è 20 (5 + 5 * 3 = 5 + 15 = 20), ma il codice funziona rigorosamente da sinistra a destra ignorando il fatto che la moltiplicazione/divisione deve essere trattata prima e dà 30 (5 + 5 * 3 = 10 * 3 = 30). – Jave

+0

Ecco perché ho affermato: "ma dovrebbe darti un'idea generale della direzione che devi seguire". – kaspermoerch

+0

Sì, basta indicarlo in modo che qualcuno non si confonda quando non funziona come previsto (come hai affermato di non averlo testato). – Jave

0

Prova in questo modo.

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

vuole valore da textview non impostato nella vista testo ha già impostato il valore nella vista testo – Pratik

0

split con il segno + come questo senso

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

ora convertire la matrice

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

String a tv.getText(). ToString(); , questo non lo capisco –

+0

scusa è errore di stampa – Pratik

+0

devi sostituire "\ n" con il "" e poi tagliare la stringa dopo che dividi la stringa – Pratik

0

Devi effettuare le seguenti operazioni:

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

Se è la somma di tutti i numeri desiderati, ho creato un piccolo frammento per te in grado di gestire sia + che - utilizzando una regex (ho lasciato alcune chiamate di stampa lì per aiutare visualizzare ciò che accade):

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

Questo codice stampa la seguente:

5 
- 9 
+ 5 
5 
-9 
5 

Sum: 1 

Edit: scusate se ho frainteso la tua domanda, è stato un po 'poco chiaro che cosa si voleva fare. Supponevo che volessi ottenere la somma dei numeri come numero intero anziché come stringa.

Edit2: per ottenere i numeri separati gli uni dagli altri, fare qualcosa di simile, invece:

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