0

電卓プログラムでスペースをどのように説明できるのだろうかと思っていました。現在、すべての値の後にスペースがある場合にのみ機能するように設定されています。複数のスペースがある場合でも機能できるようにしたい。何かをしようとしましたが ('=' 記号テストの下で実行されたアクションで)、実際には機能しませんでした。したがって、複数のスペースを考慮に入れる方法を知りたいと思っていました(次の値の前に複数のスペースがある場合、それが事実であることを認識し、余分なスペースを削除する必要があります)。ありがとう

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

4 に答える 4

1

この方法には、正規表現の知識が必要です。文字列ごとに、複数の連続するスペースのインスタンスを 1 つのスペースに置き換えるだけです。つまり、正規表現を使用して、"\\s+"「複数のスペース」を意味する を" "、単なるスペース文字である に置き換えます。

例:

String c = ...
c = c.replaceAll("\\s+", " ");
于 2012-11-11T02:12:33.357 に答える
1
String str = "your     string";
Pattern _pattern = Pattern.compile("\\s+");
Matcher matcher = _pattern.matcher(str);
str = matcher.replaceAll(" ");
于 2012-11-11T02:15:10.360 に答える
0

部分文字列を使用する代わりに、パラメーターとして aScannerを取る aを使用Stringします。

または、「スペース」ボタンを押した後に無効にし、別のボタンを押したときに有効に戻すことができます。

于 2012-11-11T02:09:32.230 に答える
0

b が空でない場合は、を使用して前の文字を調べてみることができますcharAt。スペースの場合は何もしません。

于 2012-11-11T02:15:55.410 に答える