我有一个简单的文本文件,其中包含名为 logindata.txt 的信息。它看起来像这样:
username1:password1:username2:password2
计划是将行拆分为“:”符号。
到目前为止,这是我的代码......
(...)
final StringBuilder text = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
try {
String line;
while ((line = br.readLine()) != null) {
text.append(text);
//stuff over here ?
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
如果我的文件中只有一个单词,那么这种方式非常好。
但是我想用这个文件存储所有的用户名和密码(这只是为了学习目的,我知道它有点愚蠢)到底是这样的:
(...)
login_button.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (username.getText().toString().equals(text.toString()) && password.getText().toString().equals(text.toString()))
//Stuff happening here if the username & password is correct...
(...)
我完全陷入困境,尝试过很多分裂字符串的例子,但似乎都没有。
答案 0 :(得分:1)
在你的情况下,我想使用Map<Username, Password>
这样的模式:
String line = "username1:password1:username2:password2";
Map<String, String> userPass = new HashMap<>();
Pattern pattern = Pattern.compile("([^:]+):([^:]+)");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
userPass.put(matcher.group(1), matcher.group(2));
}
System.out.println(userPass);
输出
{username2=password2, username1=password1}
如果要检查用户是否存在,可以使用:
String username = "username1";
String password = "password1";
if(userPass.containsKey(username) && userPass.get(username).equals(password)){
//User exist
}
如果您可以重复值,您可以使用其他结构或创建一个包含用户名和密码的新对象,而不是地图
答案 1 :(得分:0)
用于拆分文本的通用代码将是
class Main {
public static void main(String[] args) {
String text = "username1:password1:username2:password2";
String[] vals = text.split(":");
for (String temp: vals){
System.out.println(temp);
}
}
}
答案 2 :(得分:0)
要在java中拆分String
,您可以使用String#split(string regex)
。
在您的情况下,将文件读入String
后,您可以将所有用户名/密码对放入HashMap进行查找。
String text = "username1:password1:username2:password2"; // you would read it from the file
String[] segments = text.split(":"); // split the string with ":"
Map<String, String> userPassMap = new HashMap<>(); // initialize the map to store user info
for (int i = 0; i < segments.length; i+=2) {
userPassMap.put(segments[i], segments[i+1]);
}
并进行登录验证
login_button.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
String user = username.getText().toString().trim(); // trim() to get rid of heading and trailing empty spaces
String pass = password.getText().toString().trim();
if (userPassMap.containsKey(user) && userPassMap.get(user).equals(pass)) {
//Stuff happening here if the username & password is correct...
}
(...)