【问题标题】:“merge” two readers into one writer with special condition将两个读者“合并”为一个具有特殊条件的作家
【发布时间】:2015-11-12 09:43:18
【问题描述】:

我需要实现方法 public static void filter(Reader mails, Reader groups, Writer users) 以这样的方式将两条数据从 reader 合并到一个 writer。

邮件文件:

Login;Email
#ivanovjti;ivanov@mail.com
petrovjti;petrov@google.com
obamajti;obama@yahoo.com

以及组文件:

Login;Group
ivanovjti;Java1
petrovjti;Java2
obamajti;Java1

合并的结果应该是这样的:

Login;Email;Group
#ivanovjti;ivanov@mail.com;Java1
petrovjti;petrov@google.com;Java2
obamajti;obama@yahoo.com;Java1

我的代码:

package homework_4;

import java.io.*;

public class Main {

    public static void filter(Reader mails, Reader groups, Writer users) throws IOException {

        BufferedReader brm = new BufferedReader(mails);
        BufferedReader brg = new BufferedReader(groups);
        BufferedWriter bru = new BufferedWriter(users);

        String m = brm.readLine();
        String g = brg.readLine();

        while (m != null && g != null) {
            bru.write(m + ";" + g.split(";")[1] + "\n");
            m = brm.readLine();
            g = brg.readLine();
        }
        bru.flush();
    }

    public static void main(String[] args) throws FileNotFoundException, IOException{

            FileReader frm = new FileReader("homework_4_1.txt");
            FileReader frg = new FileReader("homework_4_2.txt");
            FileWriter fwu = new FileWriter("homework_4_3.txt");

            filter(frm, frg, fwu);

            frm.close();
            frg.close();
            fwu.close();

    }

}

但我有一个条件。如果文件邮件或文件组包含符号“#”,则合并结果应如下所示:

Login;Email;Group
petrovjti;petrov@google.com;Java2
obamajti;obama@yahoo.com;Java1

我不知道怎么做。哪个方法检查这个特殊符号?

【问题讨论】:

  • "homework_4_1.txt" "homework_4_2.txt" "homework_4_3.txt"--嗯...
  • homework_4_1 包含邮件。 homework_4_2 包含组。 homework_4_3 包含用户。
  • 只要观察你刚刚读到的字符串,如果其中一个以#开头,则继续下一次阅读。
  • 好的。但这是怎么做到的?)

标签: java merge bufferedreader filereader


【解决方案1】:

您有包含文件每一行的Strings 变量。正如我在您的示例中看到的那样,您需要忽略包含# 符号的行。 (如果我错了,请纠正)。

String m = brm.readLine();   
String g = brg.readLine();

while (m != null && g != null) {
    // check if contains # and write otherwise
    if(!m.contains("#") && !g.contains("#")) {
        bru.write(m + ";" + g.split(";")[1] + "\n");
    }
    m = brm.readLine();
    g = brg.readLine();
}

【讨论】:

  • 谢谢,我觉得没那么容易
  • 你已经在那里了,请保存我提供的字符串 API 链接,Java official documentation is great。它将在将来对您有所帮助,非常易于使用并且非常具有描述性:)
  • @PidunaV.A.也不在乎粗鲁的用户,StackOverflow 一开始有点像丛林...... ;)
猜你喜欢
  • 2020-05-23
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多