java Swing 简单计算器实现

用java swing 写了一个计算器的图形。

其实图形部分并不多,目前不仅有图形,还能输入并显示,只是没有计算功能,点击按钮显示相对输入,在对输入规则上费了一些时间

  1 package myJavaSwing;
  2 
  3 import jdk.internal.cmm.SystemResourcePressureImpl;
  4 import sun.awt.image.BufImgSurfaceData;
  5 import sun.plugin2.ipc.windows.WindowsIPCFactory;
  6 
  7 import javax.swing.*;
  8 import javax.swing.border.Border;
  9 import javax.swing.border.LineBorder;
 10 import javax.swing.plaf.metal.MetalBorders;
 11 import java.awt.*;
 12 import java.awt.event.ActionEvent;
 13 import java.awt.event.ActionListener;
 14 import java.math.*;
 15 
 16 public class myJavaSwing{
 17     JFrame          frame;
 18     JPanel          panel;
 19     JButton[][]     buttons;
 20     JTextField      resultShow;
 21     JTextField      resultShow2;
 22     String          inputString;
 23     buttonAction    Action;
 24     int             row;                    //偏移量
 25     int             line;
 26     boolean         calFlag;                //是否科学计算器,按钮布局和功能差异
 27     static Double   E     = 2.7182818285;
 28     static Double   PI    = 3.1415926536;
 29     
 30     
 31     public myJavaSwing(){
 32         this(false);
 33     }
 34 
 35     /**
 36      * 构造方法 新建 frame panel等实例,其他啥也不做
 37      * 其他东西全在lunch里面了
 38      * @param isScin
 39      */
 40     public myJavaSwing(boolean isScin)
 41     {
 42        frame                = new JFrame("小小计算器");     //新建frame 设置标题
 43        panel                = new JPanel();                    //创建面板
 44        Action               = new buttonAction();              //创建监听实例
 45        inputString          = new String("0");          //初始显示0
 46        resultShow           = new JTextField();
 47        resultShow2          = new JTextField();
 48        calFlag = isScin;                                        //是否科学计算器
 49                            //居中显示
 50         
 51 
 52     }
 53 
 54     /**
 55      * 用于在普通界面 和plus 之间切换
 56      * 就重新构建panel视图
 57      */
 58     public void lunchChange(){
 59         frame.setVisible(false);
 60         frame = new JFrame("小小计算器");
 61         panel = new JPanel();
 62         calFlag = !calFlag;
 63         frame.setVisible(true);
 64         panel.setVisible(true);
 65         lunch();
 66     }
 67 
 68     /**
 69      * 负责初始化按钮
 70      * 文字框,设定属性,并显示出来
 71      */
 72     public void lunch(){
 73         frame.setSize(400,700);                     //设置frame大小
 74         frame.setLayout(new GridBagLayout());                    //使用 表格包布局
 75         frame.setResizable(false);                               //frame大小不可改变
 76         frame.setLocationRelativeTo(null);
 77         if(calFlag){                                             //设置是否科学计算器
 78             row  = 2;
 79             line = 1;
 80         }else{
 81             row  = 0;
 82             line = 0;
 83         }
 84         buttons = new JButton[6 + row][5 + line];
 85         for (int i = 1; i <= 3;i++) {
 86             for (int j = 1;j <= 3;j++){
 87                 buttons[i + 1 + row][j + line] = new JButton(9 - (3*i) + j + "");
 88             }
 89         }
 90 
 91         buttons[1 + row][line + 1] = new JButton("清零");
 92         buttons[1 + row][line + 2] = new JButton("删除");
 93         buttons[1 + row][line + 3] = new JButton("÷");
 94         buttons[1 + row][line + 4] = new JButton("*");
 95         buttons[2 + row][line + 4] = new JButton("-");
 96         buttons[3 + row][line + 4] = new JButton("+");
 97         buttons[4 + row][line + 4] = new JButton("=");
 98         buttons[5 + row][line + 1] = new JButton("切换");
 99         buttons[5 + row][line + 2] = new JButton("0");
100         buttons[5 + row][line + 3] = new JButton(".");
101         buttons[5 + row][line + 4] = new JButton("none");
102 
103         if(calFlag){                                                     //为科学计算器设置按钮
104 
105 
106             buttons[5 + row][line + 1].setText("%");
107 
108             buttons[1][1] = new JButton("切换");
109             buttons[1][2] = new JButton("2nd");
110             buttons[1][3] = new JButton("sin(");
111             buttons[1][4] = new JButton("cos(");
112             buttons[1][5] = new JButton("tan(");
113 
114             buttons[2][1] = new JButton("^");
115             buttons[2][2] = new JButton("lg(");
116             buttons[2][3] = new JButton("ln(");
117             buttons[2][4] = new JButton("(");
118             buttons[2][5] = new JButton(")");
119 
120             buttons[3][1] = new JButton("√");
121             buttons[4][1] = new JButton("n!");
122             buttons[5][1] = new JButton("1/X");
123             buttons[6][1] = new JButton("π");
124             buttons[7][1] = new JButton("e");
125         }
126 
127         //设置所有按钮的属性
128         for (int i = 1; i <= 5 + row;i++) {
129             for (int j = 1;j <= 4 + line;j++){
130                 try{
131                     buttons[i][j].setBackground(new Color(250, 250, 250,100));
132                     buttons[i][j].setFont(new Font("Arabic", Font.PLAIN, 20));
133                     buttons[i][j].setBorder(BorderFactory.createLineBorder(Color.black,0,true));
134                     buttons[i][j].addActionListener(Action);
135                 }catch (NullPointerException e) {
136                     System.out.println("NO." + i + row + "row " + j + line + "line NULLPOINTER" );
137                 }
138             }
139         }
140 
141 
142         resultShow.setHorizontalAlignment(SwingConstants.RIGHT);//文字右对齐
143         resultShow.setColumns(18);                              //设置文本框的列数是18
144         //resultShow.setBackground(Color.black);
145         resultShow.setEditable(false);                          //不可编辑
146         //resultShow.setText("0");
147         //resultShow.setSize(400,100);
148         resultShow.setFont(new Font("null",Font.BOLD,40));
149         resultShow.setBorder(null);
150 
151         GridBagConstraints contains = new GridBagConstraints();
152         contains.weightx = 0.5;                                 //多余部分占用比例 ?????
153         contains.weighty = 1;
154         contains.gridx = 1;
155         contains.gridy = 1;
156         contains.gridwidth = 4 + row;
157         contains.gridheight = 1;
158         contains.fill = GridBagConstraints.HORIZONTAL;
159 
160         this.frame.add(resultShow,contains);
161         contains.gridx = 1;
162         contains.gridy = 2;
163 
164         resultShow2.setHorizontalAlignment(SwingConstants.RIGHT);//文字右对齐
165         resultShow2.setColumns(18);                              //设置文本框的列数是18
166         resultShow2.setText(inputString);
167         resultShow2.setEditable(false);                          //不可编辑
168         resultShow2.setSize(400,80);
169         resultShow2.setFont(new Font("null",Font.BOLD,40));
170         resultShow2.setBorder(null);
171 
172         this.frame.add(resultShow2,contains);
173 
174 
175         contains.fill = GridBagConstraints.BOTH;
176         contains.gridheight = 1;                                 //占用行列
177         contains.gridwidth = 1;
178         for (int i = 1; i <= 5 + row;i++) {
179             for (int j = 1;j <= 4 + line;j++){
180                 if (i == 4 + row && j == 4 + line){
181                     contains.gridheight = 2;                     //占用行列
182                     contains.gridwidth = 1;
183                     contains.gridx = j;                          // 行和列
184                     contains.gridy = i + 2;
185                     this.frame.add(buttons[i][j],contains);
186                     contains.gridheight = 1;
187                 }else if (i != 5 + row || j != 4 + line ){
188                     contains.gridx = j;                           // 行和列
189                     contains.gridy = i + 2;
190                     this.frame.add(buttons[i][j],contains);
191                 }
192                 String str = buttons[i][j].getText();
193                 System.out.println(str);
194             }
195         }
196         //全部好了,让他显示出来
197         this.frame.setVisible(true);
198     }
199 
200     public void freshResult(String s){
201         this.resultShow.setText(s.replace(" ",""));
202     }
203     public void freshResultShow2(){
204         System.out.println("当前内容:" + inputString);
205         if (inputString.length() != 0){
206             this.resultShow2.setText(this.inputString.replace(" ",""));
207         }else {
208             this.resultShow2.setText("0");
209         }
210 
211     }
212 
213     /**写出来用于解析并计算的类
214      * 这是
215      */
216     class Calculator{
217         String exp;
218 
219         Calculator(){
220             this("0");
221         }
222         Calculator(String s){
223             exp = s;
224         }
225 
226         public Double getAnser(){
227             int i = 0;
228             while (true){
229                 char ch = exp.charAt(i++);
230                 if (isNum(ch + "")){
231                     break;
232                 }
233                 return 0.0;
234             }
235 
236 
237             return 0.00000000;
238         }
239 
240         private  String numSqrt(String s) throws Exception{
241             if (s.indexOf('.') > 10 || s.indexOf('-') != -1){              //数值过大或含有负号
242                 throw new Exception("输入错误,数值过大或尝试进行负数开方");
243             }
244             Double num;                                       //将字符串转换整型
245             try {
246                 num = new Double(s);
247             }catch (Exception e){
248                 System.out.println(e.getMessage());
249                 throw new Exception("格式错误");
250             }
251             return Math.sqrt(num) + "";
252         }
253 
254 
255         private String numFactorial(String s) throws Exception{ //阶乘方法
256             if (s.length() > 10 || s.indexOf('.') != -1){      //过长或含有小数点
257                 throw new Exception("计算数值过大");
258             }
259             long num;                                       //将字符串转换整型
260             try {
261                 num = Integer.parseInt(s);
262             }catch (Exception e){
263                 System.out.println(e.getMessage());
264                 throw new Exception("格式错误");
265             }
266             num = Integer.parseInt(s);
267             if(num == 1 || num == 0){                       //计算阶乘 返回结果
268                 return "1";                                 //但是,写完发现好像原来有这个方法。。。。。
269             }else{
270                 long temp;
271                 try{
272                     temp = Integer.parseInt(numFactorial(num - 1 + ""));
273                 }catch (Exception e){
274                     throw e;
275                 }
276                 return (num * temp) + "";
277             }
278         }
279 
280         private boolean isNum(String  c){
281             for (int j = 0;j < c.length() ;j++){
282                 for (int i = 0;i < 10;i++){
283                     if ((i + "").equals(c.charAt(j) + "")){
284                         break;
285                     }
286                     if(i == 9){
287                         return false;
288                     }
289                 }
290             }
291 
292             return true;
293         }
294 
295     }
296 
297     /**
298      * 处理案件事件的类
299      */
300     class buttonAction implements ActionListener{                   //没写完,正在想方案
301         @Override
302         public void actionPerformed(ActionEvent e) {
303             System.out.println(e.getActionCommand());
304             String cmd = e.getActionCommand();
305             if(cmd.equals("删除")){
306                 inputString = numDelete(inputString);                           //本来直接获取对应按钮文本,但是代码太长了,就直接输字算了
307                 freshResultShow2();                                             //另外,换了比较方法 替换 ==
308                 return;
309             }else if (isMathFunc(cmd)){                                     //几个特殊数学函数
310                 addInput(cmd);                                                  //例如 sin cos啥的
311                 return;
312             }else if (cmd.equals("=")){                                          //开始计算吧,,没写计算方法,比输入方法简单不到哪里去
313                 cmdAnser();                                                     //输入方法写的我好累。。
314                 return;                                                         //一堆输入规则
315             }else if (cmd.equals("清零")){                                        //就是清零呗
316                 inputString = "0";
317                 freshResultShow2();
318                 freshResult("");
319                 return;
320             }else if (cmd.equals("切换")){                                        //进行界面切换,将清除所有已输入
321                 inputString = "0";
322                 freshResultShow2();
323                 freshResult("");
324                 lunchChange();
325                 return;
326             }
327             addInput(e.getActionCommand());                                 //其他的全交给输入了,一大波输入规则即将来袭
328                                                                                 //我忘写注释了。。。。好难受
329             /*if(isFunc(e.getActionCommand())){
330                 //addNum(e.getActionCommand());
331             }*/
332         }
333 
334         /**
335          * 判断输入字符串是否全数字
336          * @param c
337          * @return
338          */
339         private boolean isNum(String  c){
340             for (int j = 0;j < c.length() ;j++){
341                 for (int i = 0;i < 10;i++){
342                     if ((i + "").equals(c.charAt(j) + "")){ //如果是 10 个数当中一个 开始下一个字符
343                         break;
344                     }
345                     if(i == 9){                             //都到9了,还没有匹配到数字
346                         return false;
347                     }
348                 }
349             }
350             //全部循环完毕,竟然没有遇到不能匹配的,我给你出彩
351             return true;
352         }
353 
354 
355         /**
356          * 开始计算方法,可能抛出错误
357          */
358         private void cmdAnser(){
359             Calculator cal = new Calculator(inputString);
360             Double r = 0.000000;
361             try{
362                 r = cal.getAnser();
363             }catch (Exception e1){
364                 inputString = e1.getMessage();
365                 freshResultShow2();
366                 return;
367             }
368             freshResult(inputString);
369             inputString = r.toString();
370             freshResultShow2();
371         }
372 
373         /**
374          *
375          * @param s
376          * @return boolean
377          */
378         private boolean isMathFunc(String s){
379             if (calFlag == false){
380                 return false;
381             }
382             return ("sin(".equals(s) ||
383                     "cos(".equals(s) ||
384                     "tan(".equals(s) ||
385                     "ln(".equals(s)  ||
386                     "lg(".equals(s)   ||
387                     "^".equals(s)    ||
388                     "√".equals(s)    ||
389                     "n!".equals(s)   ||
390                     "1/X".equals(s)
391                     );
392         }
393 
394         /**
395          * 十分难受的输入方法,将输入以一定规则放到输入数组里面
396          * 规则写的很难受,也就不考虑什么效率和漂亮了
397          * 修修补补好些时间
398           * @param s
399          */
400         private void addInput(String s) {
401             /**
402              *如果长度为0 或者只有一个0
403              * 那就是没有东西咯
404              * 直接弄上去
405              **/
406             int len = inputString.length();
407             if (len == 0 || (len == 1 && inputString.charAt(0) == '0')) {
408                 if (".".equals(s)) {
409                     inputString = " 0 .";
410                 } else if (s.equals("^") || "1/X".equals(s) || s.equals('%')) {               //+-*/
411                     inputString = "0";
412                 } else if (isFunc(s)) {               //+-*/
413                     inputString = "0 " + s;
414                 } else if (s.equals("x") || s.equals("/") || s.equals("÷")) {
415                     inputString = "0 " + s;
416                 } else {
417                     if (s.equals("n!")) {
418                         inputString = "!";
419                     } else {
420                         inputString = s;
421                     }
422                 }
423                 freshResultShow2();
424                 return;
425             }
426 
427             /*
428             * 获取已输入的最后一个字符来判断下一个输入是否合法
429             * */
430             char c = inputString.charAt(inputString.length() - 1);
431 
432             /*如果已经输入乘除 阶乘 百分号
433             * 那么
434             * 1. 后面直接输入 点 需要自动添加 0
435             * 2. 仍然输入乘除 则认为纠正刚才输入,替换上一个符号
436             * 3. 输入加减 可认为正负数,合法,添加
437             * 4. 其他输入就没什么特别,直接加上 (n!和分数需要稍微变形,留在else里面 这被当作普通输入,将不再提起)
438             * */
439             if (c == '*' || c == '÷' || '!' == c || '%' == c) {
440                 if (s.equals(".")) {
441                     inputString = inputString + " " + "0 .";
442                 } else if (s.equals("+") || s.equals("-")) {
443                     inputString = inputString + " " + s;
444                 } else if (s.equals("*") || s.equals("÷")) {
445                     inputString = numDelete(inputString);
446                     inputString = inputString + " " + s;
447                 } else if (s.equals("^") || s.equals("1/X") || s.equals(")")) {
448                     ;
449                 } else {
450                     if (s.equals("n!")) {
451                         inputString = inputString + " " + "!";
452                     } else {
453                         inputString = inputString + " " + s;
454                     }
455                 }
456                 freshResultShow2();
457                 return;
458                 /*
459                 * 输入为 pi 和 e 那么后面
460                 * 1. 小数点自动加0
461                 * 2. 没了
462                 * */
463             } else if (c == 'π' || c == 'e') {
464                 if (s.equals(".")) {
465                     inputString = inputString + " " + "0 .";
466                 } else if (s.equals("^") || s.equals("1/X")) {
467                     if (s.equals("^")) {
468                         inputString = inputString + " " + s;
469                     } else {
470                         inputString = inputString + " " + "^(-1)";
471                     }
472                 } else {
473                     if (s.equals("n!")) {
474                         inputString = inputString + " " + "!";
475                     } else {
476                         inputString = inputString + " " + s;
477                     }
478                 }
479                 freshResultShow2();
480                 /* "+" "-"
481                 * 1. 输入 + - 替换
482                 * 2. 输入 乘除 检测前面是不是已经有乘除,有就将 加减 一起替换
483                 * 其实我觉得可以让他直接不输入,还能简单点
484                 * */
485             } else if (c == '-' || c == '+') {
486                 if (s.equals(".")) {
487                     inputString = inputString + " " + "0 .";
488                 } else if (s.equals("*") || s.equals("÷")) {        //将上一个+ - 替换
489                     String str = inputString;                       //
490                     if (str.length() < 3){
491                         inputString = "0 " + s;
492                         freshResultShow2();
493                         return;
494                     }
495                     System.out.println("length:" + str.length());
496                     char strch = str.charAt(str.length() - 3);
497                     if ( strch == '(' || strch == '!' || strch == '^' || strch == '%'){           ////但是这几个情况例外(某些后面能+-,但不能*/的符号
498                         if (s.equals("*") || s.equals("/") || s.equals("÷") ){
499                             return;
500                         }
501                     }
502                     char ch = '0';
503                     do {                                                    //将上一个几 + - 直接替换
504                         inputString = numDelete(inputString);
505                         ch = inputString.charAt(inputString.length() - 1);
506                     } while (ch == '*' || ch == '÷');
507                     inputString = inputString + " " + s;
508                     freshResultShow2();
509                     /*
510                     * 后面的注释不想写了,好多呀,目前运行良好就算了
511                     * 注释终结
512                     * */
513                 } else if (s.equals("+") || s.equals("-")) {
514                     inputString = numDelete(inputString);
515                     inputString = inputString + " " + s;
516                     freshResultShow2();
517                 } else if (s.equals("^") || s.equals("1/X")) {
518                     ;
519                 } else {
520                     if (s.equals("n!")) {
521                         inputString = inputString + " " + "!";
522                     } else {
523                         inputString = inputString + " " + s;
524                     }
525                 }
526                 freshResultShow2();
527                 return;
528             } else if (".".equals(c + "")) {
529                 if (!isNum(s)) {
530                     if ((".").equals(s)) {
531                         System.out.println("前面已经有一个点了");
532                     } else if (inputString.length() > 2 && inputString.charAt(inputString.length() - 2) == '0') {
533                         System.out.println("前面是0. 但是你输入不是数字,所以删了啊");
534                         inputString = numDelete(inputString);
535                         freshResultShow2();
536                         inputString = inputString + "0" + " " + s;
537                     } else if (s.equals("^") || s.equals("1/X")) {
538                         inputString = numDelete(inputString);
539                         if (s.equals("^")) {
540                             inputString = inputString + " " + s;
541                         } else {
542                             inputString = inputString + " ^(-1)";
543                         }
544                     } else {
545                         System.out.println("你输入不是是数字,所以点删了");
546                         inputString = numDelete(inputString);
547                         if (s.equals("n!")) {
548                             inputString = inputString + " " + "!";
549                         } else {
550                             inputString = inputString + " " + s;
551                         }
552                     }
553                 } else {
554                     inputString = inputString + " " + s;
555                 }
556                 freshResultShow2();
557                 return;
558             }else if ( c == '^' || c == '√' || c == '(' || c == '%' || c == '!'){  //这些符号后面不能 直接乘除
559                 if (c == '('){
560                     if (s.equals("*") || s.equals("/") || s.equals("÷") || c == '^' || s.equals("1/X") ){
561                         return;
562                     }
563                 }
564                 if (s.equals("*") || s.equals("/") || s.equals("÷")){
565                     return;
566                 }
567                 if (s.equals("n!")) {
568                     inputString = inputString + " " + "!";
569                 } else {
570                     inputString = inputString + " " + s;
571                 }
572                 freshResultShow2();
573                 return;
574             } else if (!isNum(c + "")) {              //不是加减乘除 不是点 也不是数字 可能 :括号,特殊运算符
575                 if (s.equals("^") || s.equals("1/X")) {
576                     if (s.equals("^")) {
577                         inputString = inputString + " " + s;
578                     } else {
579                         inputString = inputString + " ^(-1)";
580                     }
581                 } else {
582                     if (s.equals("n!")) {
583                         inputString = inputString + " " + "!";
584                     } else {
585                         inputString = inputString + " " + s;
586                     }
587                 }
588                 freshResultShow2();
589                 return;
590             } else if (isNum("" + c)){               //是数字,总算啥都能输入了,但是考虑小数末尾的0 (应该放到运算符处检测)和数字开头的 0
591                 /*此处考虑输入为0的情况
592                 *如果前面没有小数点,且前面的数里面没有1 - 9,那么开头多个0 只输入一个
593                 * */
594                 if (c == '0'){
595                     if (s.equals(".")){
596                         if (hasDot(inputString)){
597                             return;
598                         }else {
599                             inputString = inputString + " .";
600                         }
601                         freshResultShow2();
602                         return;
603                     }
604                     if (!isNum(s) && hasDot(inputString)){  //输入不是数字 前面有点 末尾是0
605                         while (c == '0'){
606                             inputString = numDelete(inputString);
607                             len = inputString.length() - 1;
608                             if (len >= 0){
609                                 c = inputString.charAt(len);
610                             }else {
611                                 inputString = "0";
612                                 len = 0;
613                                 break;
614                             }
615                         }
616                         if (inputString.charAt(len) == '.'){
617                             inputString = numDelete(inputString) + " " + s;
618                         }else {
619                             inputString = inputString + " " + s;
620                         }
621                         freshResultShow2();
622                         return;
623                     }
624                     if (s.equals("0") && !has129(inputString)){
625                         return;
626                     }
627                 }
628 
629                 if (s.equals(".") && hasDot(inputString)){
630                     ;
631                 }else if (s.equals("^")){
632                     inputString = inputString + " " + s;
633                 }else if (s.equals("1/X")){
634                     inputString = inputString + " ^(-1)" ;
635                 }else if (s.equals("n!")){
636                     inputString = inputString + " " + "!";
637                 }else if (c == '0' && !has129(inputString)){
638                     if (s.equals(".")){
639                         inputString = inputString + " " + s;
640                     }else {
641                         inputString = numDelete(inputString);
642                         inputString = inputString + " " + s;
643                     }
644                 }else {
645                     inputString = inputString + " " + s;
646                 }
647                 freshResultShow2();
648                 return;
649             }
650 
651             System.out.println("您似乎忽略了某些条件导致执行了该语句?位置 addinput.818156156");
652         }
653 
654         /**
655          * 判断前面是否有有效数字 1-9 & .
656          * 是否可以输入0
657          * @param s
658          * @return
659          */
660         private boolean has129(String s){
661             if (hasDot(s)){
662                 return true;
663             }else{
664                 int len = s.length() - 1;
665                 char ch = s.charAt(len);
666                 while (true){
667                     len -= 1;
668                     if (isNum(ch + "") && ch != '0'){
669                         System.out.println("true" + len);
670                         return true;
671                     }else if ( (ch == '0' || ch == ' ') && len >= 0){
672                         System.out.println("has129 len 的值:" + len);
673                         ch = s.charAt(len);
674                         continue;
675                     }else {
676                         System.out.println("false" + len);
677                         return false;
678                     }
679                 }
680             }
681         }
682 
683 
684         /**
685          * 判断字符串最后一个非数字字符后是否含有点
686          * @param s 待判断字符串
687          * @return 是否可以插入点
688          */
689         private boolean hasDot(String s){
690             int len = s.length() - 1;
691             while (true){
692                 if (s.charAt(len) == '.'){          //找到点,true
693                     return true;
694                 }else if ( (isNum(s.charAt(len) + "") || s.charAt(len) == ' ' ) && len - 1 > 0) {
695                     len--;
696                     continue;//是数字或空格,继续
697                 }else {       //不是数字,不是点,则false
698                     return false;
699                 }
700             }
701         }
702 
703         /**
704          * 删除函数,每一次输入以空格分隔
705          * 所以实际功能是删除末尾到最后一个空格之间的内容
706          * 这个地方我没有什么好办法  简单replace方法
707          *
708          * @param s要删除最后一次输入的字符串
709          * @return 删除后的字符串
710          */
711         //@org.jetbrains.annotations.NotNull
712         private String numDelete(String s){
713             int len = s.length();
714             if (len == 0 || len == 2 || len == 1){  //长度为 0 1 2 删完就都没有了
715                 return "0";
716             }
717             char c = s.charAt(--len);               //获取最后一个字符
718             String str = c + "";                    //读取删除字符串
719             while (c != ' ' && len-- > 0){           //重复直到遇到空格 或者 到头
720                 c = s.charAt(len);
721                 str = c + str;
722                 System.out.println("将删除:" + str + " i:" + len);
723             }
724             s = s + "aja";
725             return s.replace(str + "aja","");
726             //myJavaSwing.this.freshResultShow2();
727         }
728 
729         /**
730          * 判断是否数学方法,不过这个方法好像没有用
731          * 先不删他
732          * @param s
733          * @return
734          */
735         private boolean isFunc(String s){
736             return ("+".equals(s) ||
737                     "-".equals(s) ||
738                     "*".equals(s) ||
739                     "÷".equals(s) ||
740                     "%".equals(s) ||
741                     "/".equals(s));
742         }
743     }
744 
745     /**
746      * 本来写出来设置监听的,结果在lunch里面顺便就吧这事做了
747      */
748     public void setActionListener(){
749 
750     }
751     public static  void main(String[] args) {
752         System.out.println("hello world");
753         myJavaSwing cal = new myJavaSwing(true);
754         cal.lunch();
755         //设置
756 
757     }
758 
759     // todo list
760     // 输入数字前面几个 0 删除多余,
761     //小数后面多余 0 删除多余
762 
763 }
View Code

原文地址:https://www.cnblogs.com/dosu/p/12775220.html