Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从textview获取文本_Android_Textview - Fatal编程技术网

Android 如何从textview获取文本

Android 如何从textview获取文本,android,textview,Android,Textview,如果我以这种方式在textview中设置了文本,这不是问题: tv.setText("" + ANS[i]); 这仅仅是从这种方式得到的 String a = tv.getText().toString(); int A = Integer.parseInt(a); 但在文本视图中设置值的情况下 tv1.setText(" " + X[i] + "\n" + "+" + " " + Y[i]); 是这样的 5

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

  tv.setText("" + ANS[i]);
这仅仅是从这种方式得到的

     String a = tv.getText().toString();
     int A = Integer.parseInt(a);
但在文本视图中设置值的情况下

 tv1.setText("  " + X[i] + "\n" + "+" + " " + Y[i]);
是这样的

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

像这样尝试

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

像这样用+符号拆分

String a = tv.getText().toString();
String aa[];
if(a.contains("+"))
    aa = a.split("+");
现在转换数组

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

您必须执行以下操作:

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;
  5
- 9
+ 5
5
-9
5

Sum: 1

我还没有测试过这一点,但它应该能让你大致了解你需要采取的方向

为了实现这一点,我将对
TextView
的文本做一些假设:

  • TextView
    由用
    “\n”
    分隔的行组成
  • 第一行不包括运算符(+、-、*或/)
  • 在第一行之后,
    TextView
    中的行数可以是可变的,所有行数都将包括一个运算符和一个编号
  • 运算符始终是行的第一个字符
  • 首先我们得到文本:

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

    编辑

    因此,如下面评论中所述,上面进行“从左到右”计算,忽略正常顺序(+和/之前+和-)

    以下是正确的计算方法:

    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 );
    }
    
    private int getValue(字符串行){
    int值=0;
    if(第行包含(“+”)){
    String[]line=line.split(\\+);
    value+=getValue(第[0]行);
    对于(int i=1;i
    递归方法无法处理的特殊情况:

    • 如果第一个数字为负数,例如-3+5*8
    • 双运算符,例如3*-6或5/-4

    此外,事实上,我们使用的是
    整数
    ,在某些情况下可能会产生一些“奇数”结果,例如5/3=1。

    如果它是您想要的所有数字的总和,我为您制作了一个小片段,可以使用正则表达式同时处理+和-(我在其中留下了一些打印调用,以帮助可视化发生的情况):

    此代码打印以下内容:

    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;
    
      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)));
        }
    
    final String=“+5+”\n“+”-“+”+9+”\n“+”+“+”+”+5//或者从TextView获取值
    最终模式=模式.compile((-?)(\\d+);
    Matcher-Matcher=pattern.Matcher(字符串);
    ArrayList编号=新的ArrayList();
    while(matcher.find()){
    add(Integer.parseInt(matcher.group(1)+matcher.group(2));
    }
    
    是否要显示这些数字相加的结果..?我的问题是,正如我前面提到的,我在一个文本视图中有5+9的值,那么如何像tv.getText().toString()那样获取该值;tv.getText().toString()不起作用吗?@jave他需要将其转换为int,这样他就不需要任何其他字符而只需要数字。对,我更新了我的答案,告诉你如何获得所有数字的列表,而不仅仅是总和。他希望textview中的值不设置到textview中他已经将该值设置到textview字符串a tv.getText().toString(),这是我不明白的。您必须将“\n”替换为“”,然后在此之后修剪字符串拆分字符串。这不会很好。考虑下面的场景:5 + 5×3,实际结果是20(5 + 5×3=5 + 15=20),但是你的代码严格地从左到右操作忽略了乘法/除法应该被首先处理并且给出30(5 + 5 *=* * *==)的事实。这就是为什么我说:“但它应该让你大致了解你需要采取的方向。”。是的,只是指出它,这样当它没有按预期工作时,人们就不会感到困惑(正如你所说的,你没有测试它)。