如何使JTextField不接受后缀字符串中的空格

时间:2014-03-30 20:23:40

标签: java swing jtextfield postfix-notation infix-notation

Stack<String> s = new Stack<String>();        
String[] tokens = infix.split(" ");

现在我正在制作一个接受中缀字符串来计算它的计算器,但它们必须用空格分隔,我如何使它在后缀评估器不能接受空格的地方。 I.E.我必须这样做

5 + 5 * sin ( 32 ) 

但我希望它接受或

5+5*sin(32)

2 个答案:

答案 0 :(得分:0)

你可以循环遍历字符串并检查运算符并在每个运算符之后插入空格,之前和括号也是如此。

for( int i=0; i < infix.Length; i++){
    if(infix[i] == '*' || infix[i] == '-' ... ){
        infix.insert(" ", i -1 );
        infix.insert(" ", i +1 );
    }
}

或者您可以移除所有空格并使用正则表达式将字符串与所有运算符分开并在特殊情况下处理括号。

答案 1 :(得分:0)

我不确定我理解你想要达到的目标,但如果你想禁止JTexfield中的空白字符(这是我理解的问题&#34;接受没有空格&#34; ),您可以采取以下措施:

yourTextField.setDocument(new PlainDocument() {
    final Pattern WHITE_SPACES = Pattern.compile("\\s+");


    public void insertString(int pOffs, String pStr, AttributeSet pA)
            throws BadLocationException {
        if (WHITE_SPACES.matcher(pStr).matches()) {
            return;  // whitespace characters not allowed
        }
    }
});