繁体   English   中英

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

[英]My method is running twice when it is only called once

所以我从另一个类调用方法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

我要做的第一件事是在makeCard()使用对String.trim()的简单调用替换这两个while循环 - 该函数将为您删除前导和尾随空格。

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

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

如果info为空或null,该怎么办? 然后cInfo.charAt(0)将返回您获得的错误。 您应该在makeCard方法的开头进行空或空检查

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

cInfo = info.trim();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM