如何从textview获取文本

时间:2011-12-15 09:21:08

标签: android textview

如果我以这种方式在textview中设置文本,这不是问题:

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

这简直就是这样。

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

但是如果在textView中设置值。

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

就像这样

              5
             +9

我有问题,这个值如何获得。

5 个答案:

答案 0 :(得分:46)

我没有测试过这个 - 但它应该让你对你需要采取的方向有一个大概的了解。

为了实现这一目标,我将假设有关TextView的文本的一些内容:

  1. TextView由以"\n"分隔的行组成。
  2. 第一行不包含运算符(+, - ,*或/)。
  3. 在第一行之后,TextView中的行数可变,其中包括一个运算符和一个数字。
  4. 运营商将始终是第一行的Char
  5. 首先我们得到文字:

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

    然后我们将每条线分开:

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

    现在我们需要计算总价值:

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

    方法计算应该如下所示,假设我们知道一行的第一个Char是运算符:

    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。

答案 1 :(得分:1)

像这样用+符号分开

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

现在转换数组

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

答案 2 :(得分:0)

尝试这样。

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

答案 3 :(得分: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;

答案 4 :(得分: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)));
    }