【问题标题】:Assigning part of txt file to java variable将部分txt文件分配给java变量
【发布时间】:2015-06-21 17:02:49
【问题描述】:

我有一个带有以下输出的 txt 文件:

"CN=COUD111255,OU=Workstations,OU=Mis,OU=Accounts,DC=FLHOSP,DC=NET"

我要做的是读取 COUD111255 部分并将其分配给 java 变量。我将 ldap 分配给 sCurrentLine,但我得到一个空点异常。任何建议。

try (BufferedReader br = new BufferedReader(new FileReader("resultofbatch.txt")))
            {


                final Pattern PATTERN = Pattern.compile("CN=([^,]+).*");
                try {
                    while ((sCurrentLine = br.readLine()) != null) {
                        //Write the function you want to do, here.
                        String[] tokens = PATTERN.split(","); //This will return you a array, containing the string array splitted by what you write inside it.
                        //should be in your case the split, since they are seperated by ","

                    }
                     System.out.println(sCurrentLine);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                } catch (IOException e2) {
                    // TODO Auto-generated catch block
                    e2.printStackTrace();
                }

        }
    });

【问题讨论】:

标签: java bufferedreader


【解决方案1】:

您只需要逐行从文件中读取数据并将该行分配给您的变量 str。参考以下链接: How to read a large text file line by line using Java?

【讨论】:

    【解决方案2】:

    您的代码几乎是正确的。您正在将此字符串写入标准输出 - 为什么?如果我没听错的话,你需要的只是:

    private static final Pattern PATTERN = Pattern.compile("CN=([^,]+).*");
    
    public static String solve(String str) {
        Matcher matcher = PATTERN.matcher(str);
        if (matcher.matches()) {
            return matcher.group(1);
        } else {
            throw new IllegalArgumentException("Wrong string " + str);
        }
    }
    

    这个电话

    solve("CN=COUD111255,OU=Workstations,OU=Mis,OU=Accounts,DC=FLHOSP,DC=NET")
    

    给了我“COUD111255”作为答案。

    【讨论】:

    • 我正在尝试从 txt 文件而不是硬编码字符串中提取 ("CN=COUD111255,OU=Workstations,OU=Mis,OU=Accounts,DC=FLHOSP,DC=NET") .从txt文件中抓取是我的问题
    • 好吧,正如 Kutay Demireren 已经回答你的那样 - 你需要的是 BufferedReader 和 readLine 方法 - 它一次返回一个字符串。当文件完成 (EOF) 时,它返回 null。据我了解 - 你有很多行的大文件 - 可能你可以从所有行中收集 CN 列表。
    【解决方案3】:

    要从 .txt 中读取,请使用 BufferedReader。要创建一个,请编写:

    BufferedReader br = new BufferedReader(new FileReader("testing.txt"));
    

    testing.txt 是您正在阅读的 txt 的名称,并且必须在您的 java 文件中。初始化后,你必须继续:

    while ((CurrentLine = br.readLine()) != null) {
                    //Write the function you want to do, here.
                    String[] tokens = CurrentLine.split(","); //This will return you a array, containing the string array splitted by what you write inside it.
                    //should be in your case the split, since they are seperated by ","
                }
    

    您获得了令牌数组,即 = [CN=COUD111255,OU=Workstations OU=Mis,OU=Accounts,DC=FLHOSP,DC=NET]。 所以,现在取数组的第 0 个元素并利用它。你得到了 CN=COUD111255,现在!离开这里不是为了给出完整的代码。

    希望有帮助!

    【讨论】:

    • 我尝试使用您的代码,但得到的输出为“null”。我觉得我真的很亲近,但我不确定我错过了什么。我更新了上面的代码。
    • 首先,检查你是否得到了我们想要的数组。如果你得到然后取第一个元素并从字符串中删除 CN= 。好吧,如果你没有得到我们想要的数组,你可以调试并告诉我当前的令牌数组是什么?
    • 我刚刚意识到您最好将 split 方法与 CurrentLine 一起使用,这是行本身。所以用作 CurrentLine.split(",")。我在我的代码中也写错了,现在正在编辑它。请再检查一遍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2014-06-04
    • 2019-05-01
    • 2018-05-22
    • 2015-04-27
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多