Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将单个字符串分为两部分?_Java_Arrays_String_String Split - Fatal编程技术网

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

Java 如何将单个字符串分为两部分?,java,arrays,string,string-split,Java,Arrays,String,String Split,我有一个由许多行组成的文本文档,每行都有一个用户名、一个逗号和一个密码。比如说, Joe, pass1 Sally, badpassword Ahmed, goodpassword 等等 我可以毫不费力地将这些行读入我的程序。之后,我想将它们分割成一个ArrayListString.split()。我需要一个ArrayList,无论如何,当我调用split()myString时,该字符串保持不变。所以我不知道如何继续 这就是我认为我有问题的地方: while (

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

Joe, pass1
Sally, badpassword
Ahmed, goodpassword
等等

我可以毫不费力地将这些行读入我的程序。之后,我想将它们分割成一个
ArrayList
String.split()。我需要一个
ArrayList
,无论如何,当我调用
split()
my
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);
            }
        }
    }
}
publicbuggergui(){
超级(“密码”);
setLayout(新的GridLayout(3,4));
userL=新的JLabel(“用户名”);
添加(userL);
userT=新的JTextField(10);
添加(userT);
passL=新的JLabel(“密码:”);
添加(passL);
passT=新的JPasswordField(10);
添加(passT);
blankL=新的JLabel();
添加(空白);
loggin=新的JButton(“登录”);
添加(loggin);
handler=newhandler();
addActionListener(处理程序);
passT.addActionListener(处理程序);
addActionListener(处理程序);
}
私有类处理程序实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件){
字符串user=userT.getText();
String pass=passT.getText();
if(event.getSource()==loggin){
out.println(“用户名:+user”);
out.println(“密码:+pass”);
试一试{
ArrayList userstr=新的ArrayList();
FileReader fr1=新的FileReader(“C:\\Users\\Owner\\Desktop\\passlist.txt”);
BufferedReader br1=新的BufferedReader(fr1);
字符串str;
while(true){
如果((str=br1.readLine())!=null)
打破
out.println(str);
str.split(“,”);
userstr.add(str);
}     
对于(int i=0;i
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");
    }
}
请注意,我将其与
user
进行比较,后者是一个字符串,而
userT
似乎是一个控件。

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


您可能希望使用“\s*,\s*”,它翻译为“任意数量的空格字符,后跟逗号,后跟任意数量的空格字符”。

我想您正在寻找以下内容:

String String=“这是要拆分的字符串。”; ArrayList ArrayList=新的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]);

你的问题是什么?我如何在@slaks中分割字符串?如果你的目标是因为沟通失误而感到沮丧,那么很不幸,这是有效的。请解决这个问题;请告诉我重要的细节。另外,请仔细阅读、和部分。5秒钟的研究会给你答案。为什么不看看如何在java中拆分字符串的示例呢?就像这样:是的,它确实有效,你只是没有正确地使用它。我已经尝试过了,但它没有达到我想要的效果。巫婆将它们储存在一个数组中,以满足我对你们要求的理解。也许您可以澄清您的需求?基于对需求的更好理解,再次编辑。您不能用
str=str.split(“,”)
替换
str=str.split(“,”)
,因为str.split(“,”)返回字符串数组(因此不是无效方法)。此外,while循环在从br1读取一行后立即中断。当从br1上看不到更多信息时,它可能会破裂。不,我没有,但无论如何,谢谢
while ((str = br1.readLine()) != null)
    userstr.add(str.split(",")[0]);