【问题标题】:How can I separate a single String into two parts? [duplicate]如何将单个字符串分成两部分? [复制]
【发布时间】:2016-01-20 21:05:28
【问题描述】:

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

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

这是全班:

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

【问题讨论】:

  • 你有什么问题?
  • 我如何分割字符串@SLaks
  • 如果您的目标是因沟通不畅而感到沮丧,那么不幸的是,它是有效的。请解决这个问题;请告诉重要的细节。也请浏览tourhelp centerhow to ask a good question 部分。
  • 5 秒的研究会给你答案。您为什么不寻找如何在 java 中拆分字符串的示例?像这样:stackoverflow.com/questions/3481828/…
  • 是的,它确实有效,只是你没有正确使用它。

标签: java arrays string string-split


【解决方案1】:

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

你可能想要的是:

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,它似乎是一个控件。

【讨论】:

  • 我已经尝试过了,但它不适合我想做的事情。女巫将它们存储在数组列表中
  • 已编辑以满足我对您的要求的理解。或许您可以阐明您的要求?
  • 根据对您要求的更好理解再次编辑。
【解决方案2】:

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

您可能想要的是使用“\s*,\s*”,它转换为“任意数量的空白字符后跟逗号,后跟任意数量的空白字符”。

【讨论】:

    【解决方案3】:

    我想你正在寻找这个:

    String string = "这是要拆分的字符串。"; ArrayList arrayList = new ArrayList(Arrays.asList(string.split(" ")));

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

    【讨论】:

    • 不,我不是,但无论如何谢谢
    【解决方案4】:

    你曾经有

    str.split(",");
    

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

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

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

    【讨论】:

    • 你不能用 str = str.split(",") 替换 str.split(",") 因为 str.split(",") 返回一个字符串数组(因此不是一个 void 方法)。
    • 此外,一旦从 br1 读取一行,while 循环就会中断。当无法从 br1 中读取任何内容时,它可能会中断。
    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 2016-03-23
    相关资源
    最近更新 更多