m9_22458869 2020-11-05 16:10 采纳率: 0%
浏览 55
已结题

在Android中用正则匹配出textview里算数式(例如29+90)的加减乘除符号(+-*/)。

本问题希望的效果是,点击等于号后,以字符串的形式返回算式里面的符号

源码如下,MainActivity

package com.example.calculator_v3;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.xml.sax.SAXException;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	protected static final String TAG = "lookerror";
	private TextView textViewoperation;
	private TextView textViewresult;
	private Button button0;
	private Button button1;
	private Button button2;
	private Button button3;
	private Button button4;
	private Button button5;
	private Button button6;
	private Button button7;
	private Button button8;
	private Button button9;
	private Button buttonc;
	private Button buttoncel;
	private Button buttondiv;
	private Button buttonsum;
	private Button buttonmul;
	private Button buttonsub;
	private Button buttonequal;
	private Button buttondot;
	
	
	

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        textViewoperation = (TextView) this.findViewById(R.id.textView1);
        textViewresult = (TextView) this.findViewById(R.id.textView2);
        
        button0 = (Button) this.findViewById(R.id.button_0);
        button1 = (Button) this.findViewById(R.id.button_1);
        button2 = (Button) this.findViewById(R.id.button_2);
        button3 = (Button) this.findViewById(R.id.button_3);
        button4 = (Button) this.findViewById(R.id.button_4);
        button5 = (Button) this.findViewById(R.id.button_5);
        button6 = (Button) this.findViewById(R.id.button_6);
        button7 = (Button) this.findViewById(R.id.button_7);
        button8 = (Button) this.findViewById(R.id.button_8);
        button9 = (Button) this.findViewById(R.id.button_9); 
        
        
        
        buttonc = (Button) this.findViewById(R.id.button_c);
        buttoncel = (Button) this.findViewById(R.id.button_cel);
        
        buttondiv = (Button) this.findViewById(R.id.button_div);
        buttonsum = (Button) this.findViewById(R.id.button_sum);
        buttonmul = (Button) this.findViewById(R.id.button_mul);
        buttonsub = (Button) this.findViewById(R.id.button_sub);
        
        buttonequal = (Button) this.findViewById(R.id.button_equal);
        buttondot = (Button) this.findViewById(R.id.button_dot);
        
        
        
        number_activity(button0,textViewoperation);
        number_activity(button1,textViewoperation);
        number_activity(button2,textViewoperation);
        number_activity(button3,textViewoperation);
        number_activity(button4,textViewoperation);
        number_activity(button5,textViewoperation);
        number_activity(button6,textViewoperation);
        number_activity(button7,textViewoperation);
        number_activity(button8,textViewoperation);
        number_activity(button9,textViewoperation);
        
        number_activity(buttondiv,textViewoperation);
        number_activity(buttonsum,textViewoperation);
        number_activity(buttonmul,textViewoperation);
        number_activity(buttonsub,textViewoperation);
        number_activity(buttondot,textViewoperation);
        
        buttonequal.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Double sum = null;
				System.out.print(textViewoperation.getText());
				String IP4 = "[0-9]*";
				String[] ss = textViewoperation.getText().toString().split(IP4);
				Pattern p = Pattern.compile("[+-/\\*]+");
				Matcher m = p.matcher(textViewoperation.getText().toString());
				String[] result = p.split(textViewoperation.getText().toString());
				Pattern p2 = Pattern.compile("[0-9]+");
				String[] result2 = p2.split(textViewoperation.getText().toString());
				//String str= p.matcher(textViewoperation.getText().toString()).group();
				//String str2=m.group();
				
				sum = Double.valueOf(result[0])+Double.valueOf(result[1]);
				
				
					
				
				
				
				textViewresult.setText(""+sum+ss[0]);
				
				
				textViewoperation.setText(""); 
				 
				
			}

			
		});
        

    }
    

    public void number_activity(final Button button,final TextView textview) {
    	
    	button.setOnClickListener(new View.OnClickListener() {
    		
    		@Override
    		public void onClick(View v) {
    			
    			textview.append(button.getText());
    			
    		}
    	});
    	}
	

  


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

布局段activity_main.xml源码如下:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/TableLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button_c"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="c" />

        <Button
            android:id="@+id/button_div"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="/" />

        <Button
            android:id="@+id/button_mul"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="*" />

        <Button
            android:id="@+id/button_cel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="cel" />

    </TableRow>

    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button_7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="7" />

        <Button
            android:id="@+id/button_8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="8" />

        <Button
            android:id="@+id/button_9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="9" />

        <Button
            android:id="@+id/button_sub"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="-" />

    </TableRow>

    <TableRow
        android:id="@+id/tableRow3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button_4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="4" />

        <Button
            android:id="@+id/button_5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="5" />

        <Button
            android:id="@+id/button_6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="6" />

        <Button
            android:id="@+id/button_sum"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="+" />

    </TableRow>

    <TableRow
        android:id="@+id/tableRow4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1" />

        <Button
            android:id="@+id/button_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2" />

        <Button
            android:id="@+id/button_3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="3" />

        <Button
            android:id="@+id/button_equal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="=" />

    </TableRow>

    <TableRow
        android:id="@+id/tableRow5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button17"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="%" />

        <Button
            android:id="@+id/button_0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0" />

        <Button
            android:id="@+id/button_dot"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="." />

    </TableRow>

</TableLayout>

 

  • 写回答

2条回答 默认 最新

  • 「已注销」 2020-11-06 17:32
    关注

    Android studio里要在符号前加转义符

    String string="[\\+]";

    这个就是匹配“+”

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月16日