当一侧没有文本时,字符串拆分不起作用

时间:2015-04-09 23:49:06

标签: java split

尝试将“用户名:密码”从TextArea拆分为TextAreaUser和TextAreaPass,但当输入为“username:”或“:password”时,它会停止。

    private void jButtonStartActionPerformed(java.awt.event.ActionEvent evt) {                                             

    String[] lines = jTextAreaScrap.getText().split("\n");    
    String[] divid = null;
    String user, pass;

    jTextAreaUser.setText(null);
    jTextAreaPass.setText(null);

    for (int i=0; i<= lines.length; i++){

        if (lines[i].contains(":")) {

            divid = lines[i].split(":");

            user = divid[0]; 
            pass = divid[1];

            jTextAreaUser.append(divid[0]+"\n");
            jTextAreaPass.append(divid[1]+"\n");

        }
}

堆栈追踪:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
        at DorkCreator.DorkCreator.jButtonStartActionPerformed(DorkCreator.java:135)
        at DorkCreator.DorkCreator.access$000(DorkCreator.java:14)
        at DorkCreator.DorkCreator$1.actionPerformed(DorkCreator.java:50)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6525)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
        at java.awt.Component.processEvent(Component.java:6290)
        at java.awt.Container.processEvent(Container.java:2234)
        at java.awt.Component.dispatchEventImpl(Component.java:4881)
        at java.awt.Container.dispatchEventImpl(Container.java:2292)
        at java.awt.Component.dispatchEvent(Component.java:4703)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
        at java.awt.Container.dispatchEventImpl(Container.java:2278)
        at java.awt.Window.dispatchEventImpl(Window.java:2750)
        at java.awt.Component.dispatchEvent(Component.java:4703)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:702)
        at java.awt.EventQueue$3.run(EventQueue.java:696)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.awt.EventQueue$4.run(EventQueue.java:724)
        at java.awt.EventQueue$4.run(EventQueue.java:722)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)      

3 个答案:

答案 0 :(得分:1)

这是因为字符串拆分会删除&#34;清空&#34;。

更改为:

divid = lines[i].split(":", -1);

Java: String split(): I want it to include the empty strings at the end

答案 1 :(得分:0)

for (int i=0; i<= lines.length; i++)

如果使用&#34;&lt; =&#34;,则数组大小为2,循环将转到索引2,但最大索引为1

替换为

for (int i=0; i< lines.length; i++)

编辑:感谢Yser,这是一个糟糕的复制和粘贴,而重新编辑则更清晰:)

答案 2 :(得分:0)

您可以使用重载拆分方法。你的索引也需要&lt;不是&lt; =

private void jButtonStartActionPerformed(java.awt.event.ActionEvent evt) {                                             

String[] lines = jTextAreaScrap.getText().split("\n");    
String[] divid = null;
String user, pass;

jTextAreaUser.setText(null);
jTextAreaPass.setText(null);

for (int i=0; i< lines.length; i++){

    if (lines[i].contains(":")) {

        divid = lines[i].split(":", 2);

        user = divid[0]; 
        pass = divid[1];

        jTextAreaUser.append(divid[0]+"\n");
        jTextAreaPass.append(divid[1]+"\n");

    }
}