当前位置: 首页 > 知识库问答 >
问题:

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

斜淳
2023-03-14

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

    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个答案

东方海
2023-03-14
for (int i=0; i<= lines.length; i++)

您的数组大小为 2,如果使用”

被取代

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

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

颜举
2023-03-14

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

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

    }
}
范飞翰
2023-03-14

这是因为字符串拆分将删除“空”。

更改为:

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

Java: String split():我希望它在末尾包含空字符串

 类似资料:
  • 我有一个逗号分隔的文件,其中有许多行类似于下面的一行。 引号用于转义用于表示多个值的分隔符逗号。 现在,如果可能的话,如何使用在逗号分隔符上拆分上述值?

  • 问题内容: 我需要在SQL Server 2012中将一列中的字符串拆分为一个字符,并将每个字符串拆分成它自己的列。 例如:如果我有一个栏,我需要把它拆分成,,,,,与每个这些转化为自己列。 要拆分的列的长度可能会有所不同,因此我需要使其尽可能地动态。 问题答案: 您可以这样做: 输出: 这是动态版本:

  • 问题 你想拆分一个字符串。 解决方案 使用 JavaScript 字符串的 split() 方法: "foo bar baz".split " " # => [ 'foo', 'bar', 'baz' ] 讨论 String 的这个 split() 方法是标准的 JavaScript 方法。可以用来基于任何分隔符——包括正则表达式来拆分字符串。这个方法还可以接受第二个参数,用于指定返回的子字符串数

  • 我在使用Java8的LocalDate和DateTimeFormatterBuilder解析这些日期时遇到了困难。 下面是我尝试解析日期的方法: 执行将引发以下异常:

  • 问题内容: 我有一个名为的字符串,其形式像这样 。 我想使用:分隔符。 这样一来,单词将被拆分成自己的字符串,并将成为另一个字符串。 然后我只想使用2种不同的字符串来显示该字符串。 解决这个问题的最佳方法是什么? 问题答案: 你可能要删除第二个字符串的空格: 如果要用特殊字符(例如dot(。))分割字符串,则应在点之前使用转义字符\ 例: 还有其他方法可以做到这一点。例如,你可以使用类(来自):

  • 问题内容: 如何在PHP中使用定界符分割字符串?例如,如果我有字符串,我如何得到? 问题答案: 做这项工作: 您还可以直接将部分结果提取到变量中: