0

Trying to split a "username:password" from a TextArea, to a TextAreaUser and TextAreaPass, but when the input is "username:" or ":password" it stops.

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

        }
}

Stack Trace :

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)      
Kick Buttowski
  • 6,709
  • 13
  • 37
  • 58
miguelfbrito
  • 51
  • 1
  • 1
  • 7

3 Answers3

1

It's because string split will remove "empties".

Change to:

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

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

Community
  • 1
  • 1
Upio
  • 1,364
  • 1
  • 12
  • 27
  • Worked perfectly, what if I wanna skip that kind of lines("user:" ":pass")? – miguelfbrito Apr 10 '15 at 00:43
  • So if you want to filter them, just use your original string split and check if divid.length == 2. But I would recommend explicitly defining what you consider valid input and using a regular expression to validate the line. – Upio Apr 10 '15 at 00:49
0
for (int i=0; i<= lines.length; i++)

Your array size is 2, loop will go to index 2 if you use "<=", but the max index is 1

Replace by

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

Edit : Thanks Yser, that's a bad copy and paste while re-editing to be clearer :)

0

You can use the overload split method. Also your index needs to be < not <=

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

    }
}