2011-12-15 19 views
28

से पाठ प्राप्त करने के लिए अगर मैं जो समस्या नहीं है इस तरह से TextView में पाठ की स्थापना की है,:कैसे TextView

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

यह केवल इस तरह से हो रही है।

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

लेकिन टेक्स्ट व्यू में सेटिंग मान के मामले में।

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

जो इस

   5 
      +9 

मैं समस्या है, कैसे प्राप्त करने के लिए इस मान की तरह है।

+0

आप उन संख्याओं के अलावा का परिणाम दिखाना चाहते हैं ..? – Mudassir

+1

समस्या क्या है ?? – freshDroid

+0

मेरा प्रश्न है, मेरे पास एक टेक्स्टव्यू में 5 + 9 मान है जैसा कि मैंने पहले ही उल्लेख किया है।, तो यह मान कैसे प्राप्त करें tv.getText()। ToString(); –

उत्तर

34

मैं हेवन ' टी ने इसका परीक्षण नहीं किया - लेकिन यह आपको एक सामान्य विचार देना चाहिए जिस दिशा में आपको लेने की जरूरत है।

इस काम करने के लिए के लिए, मैं TextView के पाठ के बारे में कुछ बातें मान जा रहा हूँ:

  1. TextView"\n" साथ सीमांकित लाइनें शामिल हैं।
  2. पहली पंक्ति में एक ऑपरेटर (+, -, * या /) शामिल नहीं होगा।
  3. पहली पंक्ति के बाद TextView में लाइनों के परिवर्तनशील हो सकता है जो सभी शामिल होंगे एक ऑपरेटर और एक संख्या।
  4. एक ऑपरेटर हमेशा लाइन के पहले Char होगा।

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

    तो हम उसे विभाजित प्रत्येक पंक्ति के लिए:

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

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

    अब हम कुल मूल्य की गणना करने की जरूरत है

पहले हम पाठ मिलता है

विधि गणना इस तरह दिखनी चाहिए, यह मानते हुए कि हम पहलेको जानते हैं एक पंक्ति काऑपरेटर है:

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.

+0

यह बहुत अच्छी तरह से काम नहीं करेगा। निम्नलिखित परिदृश्य पर विचार करें: 5 + 5 * 3 वास्तविक परिणाम 20 (5 + 5 * 3 = 5 + 15 = 20) है, लेकिन आपका कोड सख्ती से बाएं से दाएं से चल रहा है इस तथ्य को अनदेखा कर रहा है कि गुणा/विभाजन का पहले इलाज किया जाना चाहिए और 30 (5 + 5 * 3 = 10 * 3 = 30) देता है। – Jave

+0

यही कारण है कि मैंने कहा: "लेकिन यह आपको उस दिशा का सामान्य विचार देना चाहिए जिसकी आपको आवश्यकता है।" – kaspermoerch

+0

हाँ, बस इसे इंगित कर रहा है ताकि जब कोई उम्मीद नहीं कर रहा हो तो कोई उलझन में नहीं आता है (जैसा आपने कहा था कि आपने इसका परीक्षण नहीं किया था)। – Jave

0

इस तरह प्रयास करें। साथ

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

वह टेक्स्टव्यू से मूल्य चाहते हैं जो टेक्स्टव्यू में सेट नहीं है, वह पहले से ही टेक्स्टव्यू – Pratik

0

विभाजन + इस तरह

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

अब सरणी

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

में मूल्य सेट करता है। Tv.getText()। ToString(); , यह मैं समझ में नहीं आता है। –

+0

खेद है कि यह गलती प्रिंट कर रहा है – Pratik

+0

आपको "\ n" को "" के साथ प्रतिस्थापित करना होगा और उसके बाद स्ट्रिंग को छिड़काव करें 0 स्ट्रिंग – Pratik

0

आप निम्न कार्य करने के लिए है कन्वर्ट की तरह साइन इन करें:

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

यदि यह आपके इच्छित सभी नंबरों का योग है, तो मैंने आपके लिए एक छोटा सा स्निपेट बनाया है जो एक रेगेक्स का उपयोग करके + और - दोनों को संभाल सकता है (मैंने वहां कुछ प्रिंट-कॉल छोड़े हैं कल्पना क्या होता है):

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))); 
    } 
संबंधित मुद्दे