如何将单个字符串分成两部分?
How can I separate a single String into two parts?
我有一个包含多行的文本文档,每一行都有一个用户名、一个逗号和一个密码。例如,
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);
}
这是全部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]);
我有一个包含多行的文本文档,每一行都有一个用户名、一个逗号和一个密码。例如,
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);
}
这是全部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]);