上源码

布局

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="right"
    android:orientation="vertical"
    tools:context=".MainActivity"
    tools:ignore="ExtraText">

<EditText
        android:id="@+id/edit_textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom|center"
        android:text=""
        android:textSize="20sp"
        tools:ignore="SpeakableTextPresentCheck" />

<TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:stretchColumns="*" >

<TableRow>

<Button
                android:id="@+id/btnClear"
                android:layout_height="60dp"
                android:onClick="btnClear"
                android:text="清除" />

<Button
                android:id="@+id/btnDel"
                android:layout_height="60dp"
                android:onClick="btnDel"
                android:text="删除" />
            
            <Button
                android:id="@+id/btnEqual"
                android:layout_height="60dp"
                android:onClick="btnEqual"
                android:text="=" />

</TableRow>

<TableRow>

<Button
                android:id="@+id/btnJz"
                android:layout_height="60dp"
                android:onClick="btnJz"
                android:text="转16进制" />

<Button
                android:id="@+id/btnJA"
                android:layout_height="60dp"
                android:onClick="btnJA"
                android:text="转10进制" />
            
            <Button
                android:id="@+id/btnFz"
                android:layout_height="60dp"
                android:onClick="btnFz"
                android:text="复制结果" />
                        
        </TableRow>

<TableRow>

<Button
                android:id="@+id/btnZz"
                android:layout_height="60dp"
                android:onClick="btnZz"
                android:text="smali正则" />

<Button
                android:id="@+id/btnSjc"
                android:layout_height="60dp"
                android:onClick="btnSjc"
                android:text="时间转戳" />

<Button
                android:id="@+id/btnSj"
                android:layout_height="60dp"
                android:onClick="btnSj"
                android:text="戳转时间" />

</TableRow>

</TableLayout>
</LinearLayout>

功能实现

mainactivity.java

package com.example.myapplication;

import static java.lang.String.valueOf;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.*;

public class MainActivity extends Activity {
    EditText edit = null;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit = findViewById(R.id.edit_textview);
    }

/*public void btnClick(View view) { //输入按钮功能实现
     switch (view.getId()) {
     case R.id.btn0:
     edit.append("0");
     break;
     }
     }*/

public void btnEqual(View view) { //等于功能实现
        String str = edit.getText().toString();
        try {
            switch (str) {
                case "":
                    break;
                default:
                    //Java计算代码
                    String result = calculate(str);
                    edit.setText(result);
            }
        } catch (Exception e) {
        }
    }

private static int number(char[] arr, int start, int end) {
        StringBuilder buffer = new StringBuilder();
        for (int i = start; i <= end; i++) {
            buffer.append(arr[i]);
        }
        return Integer.parseInt(buffer.toString());
    }

private static int comp(String op) {
        if (op.equals("+") || op.equals("-"))
            return 1;
        if (op.equals("*") || op.equals("/"))
            return 2;
        return 0;
    }

private static String compute(Integer a, Integer b, String op) {
        Integer res;
        if (op.equals("+")) {
            res = a + b;
            return res.toString();
        }
        if (op.equals("-")) {
            res = a - b;
            return res.toString();
        }
        if (op.equals("*")) {
            res = a * b;
            return res.toString();
        }
        if (op.equals("/") && b != 0) {
            res = a / b;
            return res.toString();
        } else {
            return "error";
        }
    }

private static String calculate(String source) {
        Stack<Integer> numbers = new Stack<>();
        Stack<String> operator = new Stack<>();
        operator.push(".");
        char[] exp = source.toCharArray();
        int start = 0;
        if (exp[0] == '-') numbers.push(0);
        for (int j = 0; j < exp.length; j++) {
            if (exp[j] == '+' || exp[j] == '*' || exp[j] == '/' || exp[j] == '-') {
                if (start <= j - 1) {
                    numbers.push(number(exp, start, j - 1));
                }
                start = j + 1;
                while (comp(operator.peek()) >= comp(valueOf(exp[j]))) {
                    Integer two = numbers.peek();
                    numbers.pop();
                    Integer one = numbers.peek();
                    numbers.pop();
                    String result = compute(one, two, operator.peek());
                    operator.pop();
                    if (result.equals("error")) {
                        return result;
                    }
                    numbers.push(Integer.parseInt(result));
                }
                operator.push(valueOf(exp[j]));
            }
        }
        numbers.push(number(exp, start, exp.length - 1));
        while (operator.size() > 1) {
            Integer two = numbers.peek();
            numbers.pop();
            Integer one = numbers.peek();
            numbers.pop();
            String op = operator.peek();
            operator.pop();
            String value = compute(one, two, op);
            if (value.equals("error")) {
                return value;
            }
            numbers.push(Integer.parseInt(value));
        }
        return numbers.peek().toString();
    }

public void btnClear(View view) { //清除功能实现
        String i = "";
        edit.setText(i);
    }

public void btnDel(View view) { //删除功能实现
        String str = edit.getText().toString();
        switch (str) {
            case "":
                break;
            default:
                edit.setText(str.substring(0, str.length() - 1));
        }
    }

public void btnJz(View view) { //转16进制功能实现
        String str = (edit.getText().toString());
        try {
            switch (str) {
                case "":
                    break;
                default:
                    edit.setText(Long.toHexString(Long.parseLong(str)));
            }
        } catch (Exception e) {
        }
    }

public void btnJA(View view) { //转10进制功能实现
        String str = edit.getText().toString();
        try {
            switch (str) {
                case "":
                    break;
                default:
                    edit.setText(Integer.valueOf(str, 16).toString());
            }
        } catch (Exception e) {
        }
    }
    /* public void btnSj(View view) { //当前时间功能实现
     Date date1 = new Date();
     SimpleDateFormat s = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
     edit.setText(s.format(date1));
     }*/

/* public void btnSj(View view) { //当前时间戳功能实现;
     Date date = new Date();
     edit.setText(String.valueOf(date.getTime() / 1000));
     } */

public void btnSjc(View view) throws ParseException { //时间转戳功能实现;
        String str = edit.getText().toString();
        try {
            if (str.contentEquals("")) {
            } else {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                String valueOf = String.valueOf(sdf.parse(str).getTime() / 1000);
                edit.setText(valueOf);
            }
        } catch (Exception e) {
        }
    }

public void btnSj(View view) { //戳转时间功能实现;
        String str = edit.getText().toString();
        try {
            switch (str) {
                case "":
                    break;
                default:
                    String formats = "yyyy-MM-dd";
                    Long timestamp = Long.parseLong(str) * 1000;
                    String dateStr = new SimpleDateFormat(formats, Locale.CHINA).format(new Date(timestamp));
                    edit.setText(dateStr);
            }
        } catch (Exception e) {
        }
    }

public String Z(String Zstr) {
        //正则表达式
        String[] ZZstr = Zstr.split("\n");
        StringBuffer ZZBD = new StringBuffer();
        for (int i = 0; i < ZZstr.length; i++) {
            //如果字符串为空则不做处理
            String ZFC = ZZstr[i].replace(" ", "");
            if (ZFC != null && ZFC.length() != 0) {
                //如果是if或者goto判断则不做处理
                if (!ZFC.substring(0, 3).equals("if-") && !ZFC.substring(0, 4).equals("goto")) {
                    //const-string处理
                    if (ZFC.length() >= 12) {
                        if (ZFC.substring(0, 12).equals("const-string")) {
                            String[] Sz = ZZstr[i].split("\"");
                            Zstr = "const-string .*, \"" + Sz[1] + "\"";
                        }
                        }
                        Zstr = ZFC;
                        //const处理
                        if (Zstr.length() >= 6) {
                            String Con = Zstr.substring(0, 6);
                            if (Con.equals("const-") || Con.equals("const/") || Con.equals("constv") || Con.equals("constp")) {
                                String Cstr = regular(Zstr, "v\\d,");
                                String Cstr2 = regular(Zstr, "p\\d,");
                                if (Cstr != null && Cstr.length() != 0) {
                                    Zstr = Zstr.replace(Cstr, " .*, ");
                                } else {
                                    if (Cstr2 != null && Cstr2.length() != 0) {
                                        Zstr = Zstr.replace(Cstr2, " .*, ");
                                    }
                                }
                            } else {
                            }
                            //invoke处理
                            if (Zstr.length() >= 7) {
                                if (Zstr.substring(0, 7).equals("invoke-")) {
                                    String Zstr2 = regular(Zstr, "\\{.*\\}");
                                    Zstr = Zstr.replace(Zstr2, "{.*}");
                                } else {
                                }
                                //instance处理
                                String IN = Zstr.substring(0, 9);
                                if (IN.equals("instance-")) {
                                    String Zstr2 = regular(Zstr, "\\D\\d,\\D\\d,");
                                    Zstr = Zstr.replace(Zstr2, " .*, .*, ");
                                }
                                //i处理
                                String DT = Zstr.substring(0, 5);
                                if (DT.equals("iget-") || DT.equals("iput-")) {
                                    String Zstr2 = regular(Zstr, "\\D\\d,\\D\\d,");
                                    Zstr = Zstr.replace(Zstr2, " (.*), .*, ");
                                } else {
                                    //s处理
                                    String JT = Zstr.substring(0, 5);
                                    if (JT.equals("sget-") || JT.equals("sput-")) {
                                        String Zstr2 = regular(Zstr, "\\D\\d,");
                                        Zstr = Zstr.replace(Zstr2, " (.*), ");
                                    } else {
                                        //move处理
                                        String FHZ = Zstr.substring(0, 5);
                                        if (FHZ.equals("move-")) {
                                            Zstr = Zstr.substring(0, Zstr.length() - 2) + " (.*)";
                                        }
                                    }                              
                            }
                        }
                    }
                    //{}处理
                    Zstr = Zstr.replace("{", " \\{").replace("},", "\\}, ");
                    //如果是最后一行,则不增加
                    if (ZZstr.length != i + 1) {
                        //()处理
                        Zstr = Zstr.replace("(", "\\(").replace(")", "\\)");
                    }
                }
                //如果是最后一行,则不增加
                if (ZZstr.length != i + 1) {
                    //方法类型处理
                    Zstr = Zstr + "\\s*";
                }
                ZZBD.append(Zstr);
            }
        }
        return ZZBD.toString();
    }

//正则
    public static String regular(String str, String str2) {
        Matcher matcher = Pattern.compile(str2).matcher(str);
        StringBuffer stringBuffer = new StringBuffer();
        while (matcher.find()) {
            stringBuffer.append(matcher.group());
        }
        str = stringBuffer.toString();
        return str;
    }

public void btnZz(View view) { //读取复制内容进行smali正则后输出到剪切板功能实现;
        try {         
                    ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                    String sr = String.valueOf(cm.getText());
                    edit.setText(sr);
                    String text = edit.getText().toString();
                    String txt = Z(text);
                    edit.setText(txt);
                    String st = edit.getText().toString();
                    ClipboardManager c = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                    c.setText(st);                          
        } catch (Exception e) {
        }
    }
    public void btnFz(View view) { //复制结果功能实现
        String st = edit.getText().toString();
        ClipboardManager c = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        c.setText(st);
        }
}

java计算器源码有转换16进制和10进制功能相关推荐

  1. java 秒杀 源码 下载_java高并发秒杀系统3-4节秒杀功能实现.mp4

    本Java商城秒杀系统视频教程目录如下:    java高并发秒杀系统1-1节java高并发商城秒杀优化学习指引.mp4 java高并发秒杀系统1-2节项目环境搭建(Eclipse)-节.mp4 ja ...

  2. java 计算器源代码_Java计算器源码

    Java计算器源码 作者:王晓勃 本计算器仅供交流使用,如有错误,敬请谅解.本计算器参考了网友海上升明月的无私分享 (http://hi.baidu.com/haibing123/item/fc707 ...

  3. Java_io体系之BufferedWriter、BufferedReader简介、走进源码及示例——16

    Java_io体系之BufferedWriter.BufferedReader简介.走进源码及示例--16 一:BufferedWriter 1.类功能简介: BufferedWriter.缓存字符输 ...

  4. java 十六进制转十进制_「16进制转10进制」Java:十六进制转换成十进制 - seo实验室...

    16进制转10进制 问题及代码: /* *问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E. ...

  5. Python实现16进制转10进制算法及源码

    Python实现16进制转10进制算法及源码 16进制是一种常用的数学计数方式,而在Python中将16进制数据转换为10进制数据是非常简单和快捷的.下面我将展示如何使用Python实现16进制转10 ...

  6. java的16进制与10进制互相转换

    今天遇到了进制转换的有趣问题,记录下来. 1,首先,10进制转16进制,大家应该都比较熟: Integer x = 666; String hex = x.toHexString(x); System ...

  7. java将16进制与10进制互相转换

    今天遇到了进制转换的有趣问题,记录下来. 1,首先,10进制转16进制,大家应该都比较熟: Integer x = 666; String hex = x.toHexString(x); System ...

  8. java 10zhuan8,Java代码 10进制转2、8、16进制转换 / 2、8、16进制转10进制转换

    public static void main(String[] args) { int i = 10; System.out.println("***********10进制转换2进制.8 ...

  9. GK309协议电子工牌数据模拟器+Socket数据发送 JAVA版-源码

    GK309协议电子工牌数据模拟器+Socket数据发送 JAVA版-源码 说明 源码 EXE执行文件 说明 单JAVA文件,直接运行main方法即可. 只做了GK309的基础位置数据模拟: 0x01 ...

最新文章

  1. PyQt5之QThread线程模块
  2. Python函数的递归调用
  3. java 实验张智,JAVA实验指导
  4. vSphere Client 编辑虚拟机属性的问题
  5. java socket通信需要另外加密么_Java Socket实战之五 使用加密协议传输对象
  6. win7_32下编译FFmpeg
  7. centos nginx php_Centos7下NGINX+PHP的安装及配置
  8. cad图纸比对lisp_cad图纸怎么找出差异?教你怎么对比CAD图纸版本差异
  9. Scala语言精华版笔记整理
  10. 梯形图如何实现c语言 f语句,如何注释梯形图
  11. 【DVB】【Cert】DVD相关认证简介
  12. js字符串首字母大写其他小写
  13. 浅浅总结一下HTML吧
  14. 黑马“兔年限定”春节礼盒准时送达,快来领!
  15. Ubuntu下使用gcc和makefile编写c语言程序
  16. 数据库中一对一,一对多,多对多关系总结
  17. Android 挂逼 修炼之行---微信实现本地视频发布到朋友圈功能
  18. Linux——nohup命令使用(weblogic启动命令)
  19. 职称计算机word模拟题,2017职称计算机《Word》模拟测试题
  20. BAT大量裁人,快35岁的程序员该何去何从?关于如何提高核心竞争力经验分享

热门文章

  1. python 移动ui框架_Touch UI:基于vue的移动端UI框架
  2. 怎么用虚拟机玩王者荣耀?(VMware安装的win11并完成下载安卓应用的配置教程)
  3. 来自一位运营的真实产品体验
  4. 基于c语言的编译原理课程设计,编译原理课程设计心得体会
  5. VB字体对话框ShowFont
  6. FTP数据连接建立过程详解
  7. 新零售时代,企业如何实现闭环式营销
  8. webuploader 文件上传
  9. C++ Thunk技术
  10. 巴比伦富翁:让钱包充盈的7个方法