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()
myString
时,该字符串保持不变。所以我不知道如何继续
这就是我认为我有问题的地方:
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]);