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

String split not working when there is no text in one side

尝试将 "username:password" 从 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[=11=]0(DorkCreator.java:14)
        at DorkCreator.DorkCreator.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.access0(EventQueue.java:97)
        at java.awt.EventQueue.run(EventQueue.java:702)
        at java.awt.EventQueue.run(EventQueue.java:696)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:75)
        at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.awt.EventQueue.run(EventQueue.java:724)
        at java.awt.EventQueue.run(EventQueue.java:722)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain.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)      

因为字符串分割会去掉"empties".

更改为:

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

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

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

您的数组大小为 2,如果您使用“<=”,循环将转到索引 2,但最大索引为 1

替换为

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

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

您可以使用重载拆分方法。此外,您的索引需要 < 不是 <=

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");

    }
}