如何摆脱我的Calc程序的字符串中的空格

时间:2012-11-11 02:02:08

标签: java user-interface

我想知道如何在我的计算器程序中考虑空格。现在它被设置为仅在每个值之后有空格时才起作用。如果有多个空格,我希望它能够工作。我尝试做某事(在我的行动中,在'='符号测试下),但它确实没有用。所以想知道如何让它考虑多个空格(比如在下一个值之前有多个空格,那么它应该认识到这种情况,并删除多余的空格)。谢谢

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

public class GUI extends JFrame implements ActionListener
{
JPanel buttonPanel, topPanel, operationPanel;
JTextField display = new JTextField(20);

doMath math = new doMath();
String s = "";
String b= "";
//int counter;

JButton Num1;
JButton Num2;
JButton Num3;
JButton Num4;
JButton Num5;
JButton Num6;
JButton Num7;
JButton Num8;
JButton Num9;
JButton Num0;

JButton Add;
JButton Sub;
JButton Mult;
JButton Div;
JButton Eq;
JButton Clr;
JButton Space;
public GUI()
{
    super("Calculator");
    setSize(400,400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new GridLayout (2,1));

    buttonPanel = new JPanel();        
    buttonPanel.setLayout(new GridLayout(5, 4));
    buttonPanel.add(Num1 = new JButton("1"));
    buttonPanel.add(Num2 = new JButton("2"));
    buttonPanel.add(Num3 = new JButton("3"));
    buttonPanel.add(Num4 = new JButton("4"));
    buttonPanel.add(Num5 = new JButton("5"));
    buttonPanel.add(Num6 = new JButton("6"));
    buttonPanel.add(Num7 = new JButton("7"));
    buttonPanel.add(Num8 = new JButton("8"));
    buttonPanel.add(Num9 = new JButton("9"));
    buttonPanel.add(Num0 = new JButton("0"));        
    buttonPanel.add(Clr = new JButton("C"));
    buttonPanel.add(Eq = new JButton("="));
    buttonPanel.add(Add = new JButton("+"));
    buttonPanel.add(Sub = new JButton("-"));
    buttonPanel.add(Mult = new JButton("*"));
    buttonPanel.add(Div = new JButton("/"));
    buttonPanel.add(Space = new JButton("Space")); 

    Num1.addActionListener(this);
    Num2.addActionListener(this);
    Num3.addActionListener(this);
    Num4.addActionListener(this);
    Num5.addActionListener(this);
    Num6.addActionListener(this);
    Num7.addActionListener(this);
    Num8.addActionListener(this);
    Num9.addActionListener(this);
    Num0.addActionListener(this);
    Clr.addActionListener(this);
    Eq.addActionListener(this);
    Add.addActionListener(this);
    Sub.addActionListener(this);
    Mult.addActionListener(this);
    Div.addActionListener(this);
    Space.addActionListener(this);

    topPanel = new JPanel();         
    topPanel.setLayout(new FlowLayout());
    topPanel.add(display);

    add(mainPanel);

    mainPanel.add(topPanel, BorderLayout.NORTH);
    mainPanel.add(buttonPanel, BorderLayout.SOUTH);

    setVisible(true);

}

public void actionPerformed(ActionEvent e) 
{
    JButton source = (JButton)e.getSource();
    String text = source.getText();
    int counter = 0;

    if (text.equals("=")) 
    {
        doMath math = new doMath();
        for(int i = 0; i <b.length(); i++)
        {

            String c = b.substring(i,(i+1));
            String d = b.substring((i+1),(i+2));
            String temp = "";
            if( c.equals(" ") && c.equals(d))
            {
                temp = b.substring(0,i)+(b.substring(i+1));
                b = temp;
            }
        }           
        int result = math.doMath1(b);

        String answer = ""+result;
        display.setText(answer);                   

    }
    else if(text.equals("Space"))
    {

        counter ++;
        if(counter <2)
        {            
            b+= " ";
            display.setText(b);
        }
        else 
        {
            b+="";
            display.setText(b);
        }
    }

    else if (text.equals("C"))
    {
        b = "";

        display.setText(b);
    }
    else 
    {

        b += (text);

        display.setText(b);

    }
    counter = 0; 

}
}

4 个答案:

答案 0 :(得分:1)

此方法需要正则表达式的知识。对于每个字符串,只需用一个空格替换多个连续空格的任何实例。换句话说,使用正则表达式,您将使用"\\s+"替换" ",这意味着“多个空格”,这只是空格字符。

示例:

String c = ...
c = c.replaceAll("\\s+", " ");

答案 1 :(得分:1)

String str = "your     string";
Pattern _pattern = Pattern.compile("\\s+");
Matcher matcher = _pattern.matcher(str);
str = matcher.replaceAll(" ");

答案 2 :(得分:0)

使用以Scanner作为参数的String,而不是使用子字符串。

或者您可以在按下“Space”按钮后禁用“Space”按钮,当按下其他按钮时将其启用。

答案 3 :(得分:0)

如果b不为空,你可以尝试使用charAt查看前一个字符,如果是空格则不做任何事情。