尝试将“用户名:密码”从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)
答案 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");
}
}