我有一个文本文档,其中包含许多行,每行包含用户名,逗号和密码。例如,
Joe, pass1
Sally, badpassword
Ahmed, goodpassword
等等。
我可以毫不费力地将这些行读到我的程序中。之后我想将它们分成ArrayList
。 String.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);
}
}
}
}
这是全班:
exec
答案 0 :(得分: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
,它似乎是一个控件。
答案 1 :(得分:1)
如果您使用&#34;,&#34;作为split()的参数,您的结果可能不是您所期望的。如果您的字符串是&#34; Sally,xyz&#34;,它将被分成&#34; Sally&#34;和&#34; XYZ&#34 ;. 注意第二个字符串中的空格。
你可能想要的是使用&#34; \ s *,\ s *&#34;转换为&#34;任意数量的空格字符,后跟逗号,后跟任意数量的空白字符&#34;。
答案 2 :(得分:0)
我认为你正在寻找这个:
String string =“这是要拆分的字符串。”; ArrayList arrayList = new ArrayList(Arrays.asList(string.split(“”)));
这会将拆分的字符串添加到arrayList。
答案 3 :(得分:-1)
你曾经有过
Array ( [2] => ADD.mp4 [6] => Phen.mp4 [7] => REM.mp4)
和str.split(",");
是split()
方法。它并没有改变void
。
您可以将str
替换为:str.split(",")
来修复它,或者您可以将它全部放在一行上,如:
str = str.split(",")