java计算器源码有转换16进制和10进制功能
上源码
布局
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进制功能相关推荐
- java 秒杀 源码 下载_java高并发秒杀系统3-4节秒杀功能实现.mp4
本Java商城秒杀系统视频教程目录如下: java高并发秒杀系统1-1节java高并发商城秒杀优化学习指引.mp4 java高并发秒杀系统1-2节项目环境搭建(Eclipse)-节.mp4 ja ...
- java 计算器源代码_Java计算器源码
Java计算器源码 作者:王晓勃 本计算器仅供交流使用,如有错误,敬请谅解.本计算器参考了网友海上升明月的无私分享 (http://hi.baidu.com/haibing123/item/fc707 ...
- Java_io体系之BufferedWriter、BufferedReader简介、走进源码及示例——16
Java_io体系之BufferedWriter.BufferedReader简介.走进源码及示例--16 一:BufferedWriter 1.类功能简介: BufferedWriter.缓存字符输 ...
- java 十六进制转十进制_「16进制转10进制」Java:十六进制转换成十进制 - seo实验室...
16进制转10进制 问题及代码: /* *问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E. ...
- Python实现16进制转10进制算法及源码
Python实现16进制转10进制算法及源码 16进制是一种常用的数学计数方式,而在Python中将16进制数据转换为10进制数据是非常简单和快捷的.下面我将展示如何使用Python实现16进制转10 ...
- java的16进制与10进制互相转换
今天遇到了进制转换的有趣问题,记录下来. 1,首先,10进制转16进制,大家应该都比较熟: Integer x = 666; String hex = x.toHexString(x); System ...
- java将16进制与10进制互相转换
今天遇到了进制转换的有趣问题,记录下来. 1,首先,10进制转16进制,大家应该都比较熟: Integer x = 666; String hex = x.toHexString(x); System ...
- 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 ...
- GK309协议电子工牌数据模拟器+Socket数据发送 JAVA版-源码
GK309协议电子工牌数据模拟器+Socket数据发送 JAVA版-源码 说明 源码 EXE执行文件 说明 单JAVA文件,直接运行main方法即可. 只做了GK309的基础位置数据模拟: 0x01 ...
最新文章
- PyQt5之QThread线程模块
- Python函数的递归调用
- java 实验张智,JAVA实验指导
- vSphere Client 编辑虚拟机属性的问题
- java socket通信需要另外加密么_Java Socket实战之五 使用加密协议传输对象
- win7_32下编译FFmpeg
- centos nginx php_Centos7下NGINX+PHP的安装及配置
- cad图纸比对lisp_cad图纸怎么找出差异?教你怎么对比CAD图纸版本差异
- Scala语言精华版笔记整理
- 梯形图如何实现c语言 f语句,如何注释梯形图
- 【DVB】【Cert】DVD相关认证简介
- js字符串首字母大写其他小写
- 浅浅总结一下HTML吧
- 黑马“兔年限定”春节礼盒准时送达,快来领!
- Ubuntu下使用gcc和makefile编写c语言程序
- 数据库中一对一,一对多,多对多关系总结
- Android 挂逼 修炼之行---微信实现本地视频发布到朋友圈功能
- Linux——nohup命令使用(weblogic启动命令)
- 职称计算机word模拟题,2017职称计算机《Word》模拟测试题
- BAT大量裁人,快35岁的程序员该何去何从?关于如何提高核心竞争力经验分享