2011-12-15 32 views
28

nếu tôi đã đặt văn bản trong TextView theo cách như vậy, mà không phải là vấn đề:làm thế nào để có được văn bản từ TextView

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

này chỉ đơn giản nhận được từ cách này.

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

Nhưng trong trường hợp đặt giá trị trong textView.

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

đó là như thế này

   5 
      +9 

tôi có vấn đề, giá trị này như thế nào để có được.

+0

Bạn có muốn hiển thị các kết quả của việc bổ sung các con số ..? – Mudassir

+1

vấn đề là gì ?? – freshDroid

+0

câu hỏi của tôi là, tôi có 5 + 9 giá trị trong một textview như tôi đã đề cập đến., Vì vậy, làm thế nào để có được giá trị này như tv.getText(). ToString(); –

Trả lời

34

tôi thiên đường' t thử nghiệm này - nhưng nó sẽ cung cấp cho bạn một ý tưởng chung của hướng bạn cần thực hiện.

Để làm việc này, tôi sẽ giả định một vài điều về nội dung của TextView:

  1. Các TextView gồm đường phân định với "\n".
  2. Dòng đầu tiên sẽ không bao gồm toán tử (+, -, * hoặc /).
  3. Sau dòng đầu tiên có thể có một số dòng thay đổi trong TextView, tất cả sẽ bao gồm một nhà điều hànhmột số.
  4. Nhà điều hành sẽ là tuyến đầu tiên Char của một đường.

Đầu tiên chúng tôi nhận được văn bản:

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

Sau đó chúng tôi chia nó lên cho mỗi dòng:

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

Bây giờ chúng ta cần phải tính toán tổng giá trị:

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

Phương pháp tính toán sẽ giống như thế này, giả sử rằng chúng ta biếtđầu tiêncủa một dòng là các nhà điều hành:

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

Vì vậy, bên trên như đã nêu trong bình luận dưới đây làm "trái sang phải" tính toán, không chấp hành lệnh bình thường (+ và/trước + và -).

Sau đây thực hiện việc tính đúng cách:

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

Phương pháp getValue là một phương pháp đệ quy và nó sẽ giống như thế này:

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

Trường hợp đặc biệt là phương pháp đệ quy không xử lý :

  • Nếu số đầu tiên là số âm, ví dụ: -3 + 5 * 8.
  • Các toán tử đôi, ví dụ: 3 * -6 hoặc 5/-4.

Thực tế, chúng tôi đang sử dụng Integers có thể cung cấp một số kết quả "lẻ" trong một số trường hợp, ví dụ: 5/3 = 1.

+0

Điều này sẽ không hoạt động tốt. Hãy xem xét kịch bản sau: 5 + 5 * 3 Kết quả thực tế là 20 (5 + 5 * 3 = 5 + 15 = 20), nhưng mã của bạn hoạt động đúng từ trái sang phải bỏ qua thực tế là phép nhân/chia cần được xử lý trước và cho 30 (5 + 5 * 3 = 10 * 3 = 30). – Jave

+0

Đó là lý do tại sao tôi đã nói: "nhưng nó sẽ cung cấp cho bạn một ý tưởng chung về hướng bạn cần phải thực hiện." – kaspermoerch

+0

Vâng, chỉ cần chỉ ra để một người nào đó không bị lẫn lộn khi nó không hoạt động như mong đợi (như bạn đã nói bạn chưa thử nghiệm nó). – Jave

0

Hãy thử Như thế này.

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

anh ta muốn giá trị từ chế độ xem văn bản không được đặt vào chế độ xem văn bản mà anh ấy đã đặt giá trị vào khung nhìn văn bản – Pratik

0

chia tay với dấu + như cách này

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

nay chuyển đổi các mảng

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

Chuỗi tv.getText(). ToString(); , đây là tôi không hiểu. –

+0

xin lỗi đó là lỗi in ấn – Pratik

+0

bạn phải thay thế "\ n" bằng "" và sau đó cắt chuỗi sau khi tách chuỗi – Pratik

0

Bạn cần phải làm như sau:

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

Nếu nó là tổng của tất cả các số bạn muốn, tôi đã tạo một đoạn mã nhỏ cho bạn có thể xử lý cả hai và - bằng cách sử dụng regex (tôi đã để lại một số cuộc gọi in để trợ giúp hình dung những gì sẽ xảy ra):

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

mã này in như sau:

5 
- 9 
+ 5 
5 
-9 
5 

Sum: 1 

Edit: xin lỗi nếu tôi hiểu lầm câu hỏi của bạn, đó là một chút không rõ ràng những gì bạn muốn làm. Tôi cho rằng bạn muốn lấy tổng các số như một số nguyên chứ không phải là một chuỗi.

Edit2: để có được những con số tách rời nhau, làm một cái gì đó giống như thay vì điều này:

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))); 
    } 
Các vấn đề liên quan