【问题标题】:How to split the string from a file?如何从文件中拆分字符串?
【发布时间】:2018-04-12 13:26:35
【问题描述】:

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

(...)

我完全陷入困境,尝试了许多拆分字符串的示例,但似乎都没有。

【问题讨论】:

标签: java android string split stringbuilder


【解决方案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
}

如果您的值可以重复,您可以使用另一个结构或创建一个包含用户名和密码的新对象,而不是地图

【讨论】:

    【解决方案2】:

    用于分割文本的通用代码是

    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);
           }
      }
    }
    

    【讨论】:

      【解决方案3】:

      要在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...  
                   }
      
                   (...)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多