当我只调用一次时,我的方法运行两次

时间:2013-11-24 09:17:50

标签: java

所以我从另一个类调用方法makeCard(String info)。它第一次运行时工作正常,但第二次调用方法它似乎运行两次,这会产生一个StringIndexOutOfBoundsException运行时错误,我似乎无法弄清楚原因。我对Java有点新意,所以我可能会遗漏一些显而易见的东西,但我脑子里的逻辑说如果调用一次它应该只运行一次。希望有人可以指出我的错误。

以下是方法:

public void makeCard(String info){
    cInfo = new StringBuffer(info);
    int i = 0;

    while(cInfo.charAt(i)== ' '){
        cInfo.deleteCharAt(i);
    }
    while(cInfo.charAt(cInfo.length()-1)== ' '){
        cInfo.deleteCharAt(cInfo.length()-1);
        i--;
    }
    seperateValues();
    makeObject();
}

这里是它的所在地:

@Override
public void actionPerformed(ActionEvent e) {
    MainWindow mw = new MainWindow();
    CardBreakdown cb = new CardBreakdown();
    if("submit".equals(e.getActionCommand())){
        cb.makeCard(cardInfo.getText());
        mw.removeAddPanel();
        cardInfo.setText("");
    }
}

提前感谢您提供的任何帮助

这是错误: 线程“AWT-EventQueue-0”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0

3 个答案:

答案 0 :(得分:3)

第一个我要做的就是用String.trim()中的while替换那两个makeCard()循环 - 该函数将删除前导和为你留下空白。

您通常应该总是更喜欢使用库调用来创建自己的函数,尤其是函数,这些函数在处理空字符串或只包含空格的字符串时可能会有一个相当致命的缺陷: - )

对于字符串为空或变空的情况,没有检查任何一个循环,这意味着charAt会抱怨。

答案 1 :(得分:1)

如果信息为空或为空怎么办?然后cInfo.charAt(0)将返回您获得的错误。您应该在makeCard方法的开头

进行空或空检查

答案 2 :(得分:0)

只需从字符串中删除所有出现的空格字符,就会对您的代码进行不必要的复杂处理。代替:

cInfo = info.trim();