如何将单个字符串分成两部分?

How can I separate a single String into two parts?

我有一个包含多行的文本文档,每一行都有一个用户名、一个逗号和一个密码。例如,

Joe, pass1
Sally, badpassword
Ahmed, goodpassword

等等。

我可以毫无困难地将这些行读入我的程序。之后我想把它们分成一个ArrayListString.split() 表示应该将它们分隔成一个数组。我需要一个 ArrayList,无论如何,当我调用 split() 时,我的 String 没有改变。所以我不知道如何进行。

这是我认为我遇到问题的地方:

                while (true) {
                    if ((str = br1.readLine()) != null)
                        break;
                    out.println(str);
                    str.split(",");
                    userstr.add(str);
                }     

这是全部class:

public BuggerGUI() {
    super("password");
    setLayout(new GridLayout(3, 4));
    userL = new JLabel("username");
    add(userL);
    userT = new JTextField(10);
    add(userT);
    passL = new JLabel("password: ");
    add(passL);
    passT = new JPasswordField(10);
    add(passT);
    blankL = new JLabel();
    add(blankL);
    loggin =  new JButton("login");
    add(loggin);
    handler Handler = new handler();
    userT.addActionListener(Handler);
    passT.addActionListener(Handler);
    loggin.addActionListener(Handler);
}

private class handler implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent event) {
        String user = userT.getText();
        String pass = passT.getText();
        if (event.getSource() == loggin) {
            out.println("username: " + user);
            out.println("password: " + pass);
            try {
                ArrayList userstr = new ArrayList();
                FileReader fr1 = new FileReader("C:\Users\Owner\Desktop\passlist.txt");
                BufferedReader br1 = new BufferedReader(fr1);
                String str;
                while (true) {
                    if ((str = br1.readLine()) != null)
                        break;
                    out.println(str);
                    str.split(",");
                    userstr.add(str);
                }     
                for (int i = 0; i < userstr.size();)
                    if (userT.equals(userstr.get(i)))
                        out.print("cool");   
            } catch(IOException e) {
                System.out.println(ERROR);
            }
        }
    }
}

str.split(",") returns 表示由 , 分隔的原始字符串片段的字符串数组。原始字符串不受此方法的影响。所以在你的代码中,这一行没有做任何事情,因为你忽略了 return 值。

您可能想要的是:

String[] parts = str.split(",");
// do something with the parts

编辑

如果要将字符串的各个部分存储在数组列表中:

String[] parts = str.split(",");
List listOfParts = Arrays.asList(parts);

第二次编辑

如果您尝试仅使用用户名列表填充数组列表:

while((str = br1.readLine()) != null){
    out.println(str);
    String[] parts = str.split(",");
    if(parts.length > 0) {
        userstr.add(parts[0]);
    }
}

那么,你可以简化这段代码:

for(int i = 0; i < userstr.size();){
    if(userT.equals(userstr.get(i))){
        out.print("cool");
    }
}

... 将其替换为:

if(userstr.contains(user)) {
    out.print("cool");
}

请注意,我比较的是字符串 user,而不是似乎是控件的 userT

如果您使用“,”作为 split() 的参数,您的结果可能不是您所期望的。如果您的字符串是 "Sally, xyz",它将被拆分为 "Sally" 和“xyz”。 请注意第二个字符串中的 space。

您可能想要的是使用“\s*,\s*”,它转换为 "any number of whitespace characters followed by a comma followed by any number of whitespace characters"。

我想你正在寻找这个:

字符串字符串="this is the string to be split."; ArrayList arrayList = new ArrayList(Arrays.asList(string.split(" ")));

这会将拆分后的字符串添加到 arrayList。

你曾经有过

str.split(",");

split()是一个void方法。它不会改变 str.

您可以通过将 str.split(",") 替换为 str = str.split(",") 来修复它,或者您可以将它们全部放在一行中,例如:

while ((str = br1.readLine()) != null)
    userstr.add(str.split(",")[0]);