如何从文件中分割字符串?

时间:2018-04-12 13:26:35

标签: java android string split stringbuilder

我有一个简单的文本文件,其中包含名为 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...  

(...)

我完全陷入困境,尝试过很多分裂字符串的例子,但似乎都没有。

3 个答案:

答案 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...  
             }

             (...)