Android 如何从textview获取文本
如果我以这种方式在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
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 *=* * *==)的事实。这就是为什么我说:“但它应该让你大致了解你需要采取的方向。”。是的,只是指出它,这样当它没有按预期工作时,人们就不会感到困惑(正如你所说的,你没有测试它)。