输入文件in.txt:
图书名    作者     书价     出版社    ISBN     打折
c++       X      100       A      123     95%
书名      作者     价钱     出版社    ISBN号  
c++       X       100      A       123   
丛书名    作者名   单价     出版处    ISbn     打折
java     Y        101      B       234     98%
书名      著译者   价钱     出版地    ISBN号
C         Z       11      V        345
丛书名    单价     出版处    打折    
RUBY      30      X       60%
……
……
……(还有许多条记录)输出:图书名    作者     书价     出版社    ISBN     打折 
c++       X      100      A       123     95%
java      Y      101      B       234     98%
C         Z       11      V       345
RUBY              30      X               60%第1个属性输出都变为“图书名”,第2个都变为“作者”,……,……
这样怎么实现。最好有点代码,谢。当然最好是这样实现:第1个属性是N条记录中相应出现此时最多的那个,比如“图书名”出现10次,“书名”5次,“丛书”2次,
那么第1个属性就是“图书名”了,这样相对于上面的话要复杂一点了。现在的想法是采用本体技术,前提是现在已经知道在N条记录中出现的所有属性名,例如:
String[][] attriClassTable=
{{“00000000,图书名,书名,丛书名,原书名, 商品名,…},
{“00000001,作者,作者名,著译者,…},
{“00000010,商品价格,书价,单价,价格, …},

}分1次只能100了,200现在1次给不了,只能这样了,解决以后在加分吧,呵呵。

解决方案 »

  1.   

    不懂?可能我在问题的较大有点问题,呵呵。
    请问哪里表述的不怎么清楚。输入的文件也可以这样:图书名    作者    书价    出版社    ISBN    打折
    c++      X      100      A      123    95%
    java     Y      101      B      234    98%
    C        Z      11       V      345    93%丛书名    作者名  单价    出版处    打折
    c++      X      100      A      95%
    C        Z      11       V      93%书名      著译者  价钱    出版地    ISBN号
    PHP      X      100      A      123   
    JSP      Y      101      B      234   
    C        Z      11       V      345  
    ……
    ……哪种输入格式对于实现简单就哪种吧^^
      

  2.   

    用xml吧,一个xml是你的一个表,至于怎样操作xml网上资料很多
    - <表名>
    - <row no="1">
      <add key="图书名" value="vv" /> 
      <add key="作者 " value="2" /> 
      <add key="书价" value="www.baidu.com;www.sina.com;" /> 
      </row>
    - <row no="2">
      <add key="图书名" value="liyong" /> 
      <add key="作者 " value="1" /> 
      <add key="书价" value="www.baidu.com;" /> 
      </row>
    - <row no="3">
      <add key="图书名" value="wzh" /> 
      <add key="作者 " value="0" /> 
      <add key="书价" value="www.baidu.com;" /> 
      </row>
      </NetAddress>
      

  3.   

    输入是XML文件就方便些!
      

  4.   

    .TXT存储
    为什么不考虑用XML文件存储
      

  5.   

    XML不怎么会用用XML 的话能不能帮我写下处理这个的代码,谢
      

  6.   

    达到楼主想要的效果不是很难,不知道我说的是不是你要的意思:你说的“输入文件in.txt” 其实这个就是你要读取的文件,所以你可以用读文件的方式来读取这个文件。 
    最好一行显示一组字段或者信息,就像你写的这样:
    图书名    作者    书价    出版社    ISBN    打折 
    c++      X      100      A      123    95% 
    书名      作者    价钱    出版社    ISBN号  
    c++      X      100      A      123  
    丛书名    作者名  单价    出版处    ISbn    打折 
    java    Y        101      B      234    98% 
    书名      著译者  价钱    出版地    ISBN号 
    C        Z      11      V        345 
    丛书名    单价    出版处    打折    
    RUBY      30      X      60% 然后按照行读取数据,字段的行用空格分隔就知道都是什么信息了,比如分隔后的第一行第一个字段就是图书名,那么从第2行开始分隔后的第一个字段就是图书名的信息,你可以一次放到一个数组里,如果判断下一行开头的第一个字段是“书名”,那么这一行的数据都不用加在数组里,而是读这行的下一行去装如数组。这样依次类推的话 你就可以把各个字段的数据都放在各自的数组里了,书名数组里全是书,作者数组里全是作者等等。
    然后你对每个数组遍历,看看是是否有重复的书或者作者什么的,此时 你定义一个计数器,每找到一个相同的你就进行累加。然后把累加数最大的放在前面。在你输出的时候,你就可以先输出一行字段头,然后依次把各个数组的数据输出到指定的位置就可以了。就是文件流的操作,没有别的吧,你在整理一下应该能简化的更好,相信你了^_^
      

  7.   

    图书名    作者    书价    出版社    ISBN 
    c++      X      100      A      123     
    图书名    作者    书价    出版社     打折 
    c++      X      100      A       95% 
    ……
    这些都是一条条的记录,像上面那2条记录,最后应该这样的输出:
    图书名    作者    书价    出版社    ISBN    打折
    c++      X      100      A      123     95%
      

  8.   

    问题解决,代码如下:
    分两个贴,主文件:package bookProcess;import java.util.List;public class BookFileProcessor { public BookFileProcessor(String inTextFile, String outTextFile)
    {
    List<String> inStrList = NormalFileProcesser.getStringFromFile(inTextFile);
    List<String> outStrList = processList(inStrList);
    String outContent = listToString(outStrList);
    NormalFileProcesser.setContentToFile(outTextFile, outContent);
    }

    private List<String> processList(List<String> inStrList)
    {
    for (int i = 0; i < inStrList.size(); i++)
    {
    if ( i%2 == 0)
    {
    /*目前偶数列为需要替换对象*/
    String line = inStrList.get(i);
    inStrList.remove(i);
    System.out.println();
    inStrList.add(i, processLine(line, repalceStr));

    }
    }
    return inStrList;
    }

    private String listToString(List<String> strList)
    {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < strList.size(); i++)
    {
    String line = strList.get(i);
    sb.append(line + "\r\n");
    }
    return sb.toString().trim();
    }

    /**
     * 这里看怎么替换就行了, lz可以按照自己的意愿替换
     * @param line
     * @param repalceLine
     * @return
     */
    private String processLine(String line, String repalceLine)
    {
    return repalceLine;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {

    new BookFileProcessor("in.txt", "out.txt"); }

    /*替换的子串,可以单个,也可以整行, 我这里为了简便,整行替换,单个替换也是一个道理*/
    private final String repalceStr = "我的书名    我的作者    我的书价    我的出版社    我的ISBN  我的打折 ";}
      

  9.   

    文本处理和保存文件:package bookProcess;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 普通的文本文件读取与写入操作
     *
     */
    public class NormalFileProcesser {


    /**
     * 文件的每一行保存为ArrayList
     * @param filePath
     * @return
     */
    public static List<String> getStringFromFile(String filePath)
    {
    try {
    List<String> arr = new ArrayList<String>();
    BufferedReader in = new BufferedReader(new FileReader(filePath));
    if(!new File(filePath).exists())
    {
    return null;
    }
    while (in.ready()) {
    String line = in.readLine().trim();
    if (line.length() != 0)
    {
    arr.add(line);
    }
    }
    in.close();
    return arr;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }


    /**
     * 保存文本文件
     * @param filePath
     * @param content
     */
    public static void setContentToFile(String filePath, String content)
    {
    try {
    File file = new File(filePath);
    file.createNewFile();
    FileOutputStream fo = new FileOutputStream(filePath);
    PrintWriter pw = new PrintWriter(new File(filePath));
    pw.write(content);
    fo.close();
    pw.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
      

  10.   

    如果文本文件也由程序员自己定的话,那使用XML会是最简单的选择。在Google下查找“Java XML DOM 解析”,就可以找到解决方案,绝对比楼主所写代码简单。
      

  11.   


    动不动就拿xml来完,此题明显普通文本更有解析的优势,何必搞dom,sax呢?
      

  12.   

    先谢谢大家的回复ostrichmyself 兄:
    谢谢你,但是你可能误解了我的问题。例如输入:
    图书名    作者    书价    出版社    ISBN    打折 
    c++      X      100      A      123    95% 
    书名      作者    价钱    出版社    ISBN号  
    c++      X      100      A      123  
    书名      著译者  价钱    出版地    ISBN号
    c++      X       100    A       123
    书名      作者    价钱    出版社    ISBN号 
    java     Y       33      B       234那么输出应该是:
    图书名    作者    书价    出版社    ISBN    打折 
    c++      X      100      A      123    95% 
    java     Y       33      B      234
      

  13.   

    数据文件
    图书名    作者    书价    出版社    ISBN    打折 
    c++      X      100      A      123    95% 
    书名      作者    价钱    出版社    ISBN号  
    c++      X      100      A      123  
    丛书名    作者名  单价    出版处    ISbn    打折 
    java    Y        101      B      234    98% 
    书名      著译者  价钱    出版地    ISBN号 
    C        Z      11      V        345 
    丛书名    单价    出版处    打折    
    RUBY      30      X      60% 
    java文件package test;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;public class Test { public static void main(String[] args) {
    Test test = new Test();
    try {
    test.readFile();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    } public void readFile() throws FileNotFoundException, UnsupportedEncodingException {
    BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt"), "GBK"));
    BufferedWriter bw = null;
    boolean isTitle = true;
    List titles = null;
    List datas = null; try {
    bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt"), "GBK"));
    writeTitle(bw); while (bf.ready()) {
    if (isTitle) {
    titles = split(bf.readLine(), "[ ]+");
    isTitle = false;
    } else {
    datas = split(bf.readLine(), "[ ]+");
    isTitle = true;
    } if (isTitle) {
    System.out.println(titles);
    System.out.println(datas);
    writeData(bw, titles, datas);
    }
    } } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    bf.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    if (bw != null) {
    try {
    bw.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    } } public void writeTitle(BufferedWriter bw) throws IOException { // 30   20   10    30  10   5
    String t1 = "图书名";
    String t2 = "作者";
    String t3 = "书价";
    String t4 = "出版社";
    String t5 = "ISBN";
    String t6 = "打折";
    String t = format(t1, 30) + format(t2, 20) + format(t3, 10)+ format(t4, 30) + format(t5, 10) + format(t6, 5)+"\n";
    System.out.println(t);
    bw.write(t);
    } public void writeData(BufferedWriter bw, List titles, List datas)
    throws IOException {
    String title = "";
    String[] ts1 = { "图书名", "书名", "丛书名" };
    String[] ts2 = { "作者", "作者名", "著译者" };
    String[] ts3 = { "书价", "价钱", "单价" };
    String[] ts4 = { "出版社", "出版处", "出版地" };
    String[] ts5 = { "ISBN", "ISBN号" };
    String[] ts6 = { "打折" };
    int i = 0;

    // 1
    for (i = 0; i < ts1.length; i++) {
    if (titles.contains(ts1[i])) {
    title += format(datas.get(titles.indexOf(ts1[i])).toString(), 30);
    break;
    }
    }
    if (i >= ts1.length) {
    title += format("", 30);
    }

    // 2
    for (i = 0; i < ts2.length; i++) {
    if (titles.contains(ts2[i])) {
    title += format(datas.get(titles.indexOf(ts2[i])).toString(), 20);
    break;
    }
    }
    if (i >= ts2.length) {
    title += format("", 20);
    }

    //3
    for (i = 0; i < ts3.length; i++) {
    if (titles.contains(ts3[i])) {
    title += format(datas.get(titles.indexOf(ts3[i])).toString(), 10);
    break;
    }
    }
    if (i >= ts3.length) {
    title += format("", 10);
    }

    //4
    for (i = 0; i < ts4.length; i++) {
    if (titles.contains(ts4[i])) {
    title += format(datas.get(titles.indexOf(ts4[i])).toString(), 30);
    break;
    }
    }
    if (i >= ts4.length) {
    title += format("", 30);
    }

    //5
    for (i = 0; i < ts5.length; i++) {
    if (titles.contains(ts5[i])) {
    title += format(datas.get(titles.indexOf(ts5[i])).toString(), 10);
    break;
    }
    }
    if (i >= ts5.length) {
    title += format("", 10);
    }

    //6
    for (i = 0; i < ts6.length; i++) {
    if (titles.contains(ts6[i])) {
    title += format(datas.get(titles.indexOf(ts6[i])).toString(), 5);
    break;
    }
    }
    if (i >= ts6.length) {
    title += format("", 5);
    }

    title+="\n";
    System.out.println(title);
    bw.write(title);
    } public String format(String t, int count) {
    while (t.getBytes().length < count) {
    t += " ";
    }
    return t;
    } public List split(String text, String regex){
    List result = new ArrayList();

    if(null !=text){
    if(regex==null || regex.equals("")){
    result.add(text);
    }else{
    String[] d = text.split(regex);
    for (int i = 0; i < d.length; i++) {
    result.add(d[i]);
    }
    }
    }
    return result;
    }}
      

  14.   

    TO zhouzongjiu :对于
    图书名    作者    书价    出版社    ISBN    打折 
    c++      X      100      A      123    95% 
    书名      作者    价钱    出版社    ISBN号  
    c++      X      100      A      123  
    丛书名    作者名  单价    出版处    ISbn    打折 
    java    Y        101      B      234    98% 
    书名      著译者  价钱    出版地    ISBN号 
    C        Z      11      V        345 
    丛书名    单价    出版处    打折    
    RUBY      30      X      60% 
    这样的输入,输入应该是:
    图书名    作者    书价    出版社    ISBN    打折 
    c++      X      100      A      123    95%
    java    Y        101      B      234    98% 
    C        Z      11      V        345 
    RUBY      30      X      60% 
    好像输出问题很大,呵呵,还是谢谢
      

  15.   

    你别看控制台输出,要看那个out.txt
      

  16.   


    图书名 作者 书价 出版社 ISBN 打折
    c++ X 100 A 123 95%
    书名 作者 价钱 出版社 ISBN号 
    c++ X 100 A 123 
    丛书名 作者名 单价 出版处 ISbn 打折
    java Y 101 B 234 98%
    书名 著译者 价钱 出版地 ISBN号
    C Z 11 V 345
    丛书名 单价 出版处 打折   
    RUBY 30 X 60%
    package test;import java.io.Serializable;public class Textbean implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String a;//图书名
    private String b;//作者
    private String c;//书价
    private String d;//出版社
    private String e;//ISBN
    private String f;//打折
    public String getA() {
    return a;
    }
    public void setA(String a) {
    this.a = a;
    }
    public String getB() {
    return b;
    }
    public void setB(String b) {
    this.b = b;
    }
    public String getC() {
    return c;
    }
    public void setC(String c) {
    this.c = c;
    }
    public String getD() {
    return d;
    }
    public void setD(String d) {
    this.d = d;
    }
    public String getE() {
    return e;
    }
    public void setE(String e) {
    this.e = e;
    }
    public String getF() {
    return f;
    }
    public void setF(String f) {
    this.f = f;
    }
    }package test;import java.io.BufferedReader;
    import java.io.FileReader;
    import java.util.ArrayList;
    import java.util.List;public class TestReadtxt {
    public static void main(String args[]){

    List<String []> list1 = new ArrayList<String []>();//装入书的字段
    List<String []> list2 = new ArrayList<String []>();//装入书的属性
    List<Textbean> list3 = new ArrayList<Textbean>();//装入调整后书的属性
    String s="";
    String ss[]=null;
    String sa[]=null;
    String sb[]=null;
    BufferedReader is=null;
    String path="F:\\1.txt";
    FileReader fr;
    try {
    fr = new FileReader(path);
    is=new BufferedReader(fr);
    while((s=is.readLine())!=null){
     ss=s.split(" ");
     if (ss[0].equals("图书名")||ss[0].equals("书名")||ss[0].equals("丛书名")) {
     list1.add(ss);
    }else{
    list2.add(ss);
    }
    }
    is.close();

    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    for (int i = 0; i < list1.size(); i++) {
    Textbean text=new Textbean();
    ss=list1.get(i);
    sa=list2.get(i);

    for (int j = 0; j <ss.length; j++) {
    text.setA(" ");
    if (ss[j].equals("图书名")||ss[j].equals("书名")||ss[j].equals("丛书名")) {

    text.setA(sa[j]);
    break;
    }
    }
    for (int j = 0; j <ss.length; j++) {
    text.setB(" ");
    if (ss[j].trim().equals("作者名")||ss[j].trim().equals("作者")||ss[j].trim().equals("著译者")) {
    text.setB(sa[j]);
    break;
    }


    }
    for (int j = 0; j <ss.length; j++) {
    text.setC(" ");
    if (ss[j].equals("书价")||ss[j].equals("单价")||ss[j].equals("价钱")) {
    text.setC(sa[j]);
    break;
    }
    }
    for (int j = 0; j <ss.length; j++) {
    text.setD(" ");
    if (ss[j].equals("出版社")||ss[j].equals("出版处")||ss[j].equals("出版地")) {
    text.setD(sa[j]);
    break;
    }
    }
    for (int j = 0; j <ss.length; j++) {
    text.setE(" ");
    if (ss[j].equals("ISBN")||ss[j].equals("ISBN号")||ss[j].equals("ISbn")) {
    text.setE(sa[j]);
    break;
    }
    }
    for (int j = 0; j <ss.length; j++) {
    text.setF(" ");
    if (ss[j].equals("打折")) {
    System.out.println(sa[j]);
    text.setF(sa[j]);
    break;
    }
    }


    list3.add(text);
    }
    System.out.println("图书名\t作者\t书价\t出版社\tISBN\t打折 ");
    for (int i = 0; i < list3.size(); i++) {
    Textbean text=list3.get(i);
    System.out.print(text.getA()+"\t");
    System.out.print(text.getB()+"\t");
    System.out.print(text.getC()+"\t");
    System.out.print(text.getD()+"\t");
    System.out.print(text.getE()+"\t");
    System.out.println(text.getF()+"\t");
    }

    }
    }
    //得到的数据
    图书名 作者 书价 出版社 ISBN 打折 
    c++ X 100 A 123 95%
    c++ X 100 A 123  
    java Y 101 B 234 98%
    C Z 11 V 345  
    RUBY   30 X   60%
      

  17.   

    有个问题  用 ss=s.split(" ");
    取得话 显得用replace一下多个空格为一个空格
      

  18.   


    改一下就好了, 为什么不读一下代码呢? 修改如下:
    package bookReader;import java.util.ArrayList;
    import java.util.List;public class BookFileProcessor { public BookFileProcessor(String inTextFile, String outTextFile) {
    List<String> inStrList = NormalFileProcesser
    .getStringFromFile(inTextFile);
    List<String> outStrList = processList(inStrList, repalceStr);
    String outContent = listToString(outStrList);
    NormalFileProcesser.setContentToFile(outTextFile, outContent);
    } private List<String> processList(List<String> inStrList, String replace) {
    List<String> resultList = new ArrayList<String>();
    resultList.add(replace);
    for (int i = 0; i < inStrList.size(); i++) {
    if (i % 2 != 0) {
    /* 去掉偶数列 */
    String line = inStrList.get(i);
    resultList.add(line);
    }
    }
    return resultList;
    } private String listToString(List<String> strList) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < strList.size(); i++) {
    String line = strList.get(i);
    sb.append(line + "\r\n");
    }
    return sb.toString().trim();
    } /**
     * @param args
     */
    public static void main(String[] args) { new BookFileProcessor("in.txt", "out.txt"); } /* 这个完全由LZ自己拼装 */
    private final String repalceStr = "我的书名    我的作者    我的书价    我的出版社    我的ISBN  我的打折 ";}下面的没有修改package bookReader;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;/**
     * 普通的文本文件读取与写入操作
     * 
     */
    public class NormalFileProcesser { /**
     * 文件的每一行保存为ArrayList
     * 
     * @param filePath
     * @return
     */
    public static List<String> getStringFromFile(String filePath) {
    try {
    List<String> arr = new ArrayList<String>();
    BufferedReader in = new BufferedReader(new FileReader(filePath));
    if (!new File(filePath).exists()) {
    return null;
    }
    while (in.ready()) {
    String line = in.readLine().trim();
    if (line.length() != 0) {
    arr.add(line);
    }
    }
    in.close();
    return arr;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    } /**
     * 保存文本文件
     * 
     * @param filePath
     * @param content
     */
    public static void setContentToFile(String filePath, String content) {
    try {
    File file = new File(filePath);
    file.createNewFile();
    FileOutputStream fo = new FileOutputStream(filePath);
    PrintWriter pw = new PrintWriter(new File(filePath));
    pw.write(content);
    fo.close();
    pw.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
      

  19.   

    TO zhouzongjiu :
    你重复的数据没处理,别的没问题了
      

  20.   

    TO ostrichmyself  : 
    你重复的数据也没处理,呵呵
      

  21.   


    兄弟, 我给你思路如何?处理重复数据方法如下:目前是通过NormalFileProcesser 类将in.txt文件每一行读成一个List<String>,所谓重复数据的处理, 就是判断List中是否存在数据, 存在则不添加这一行,所以呢, 但是判断两行相等没有特别好的方法, 因此,你要吧List<String>这个结构改造一下, 改造成List<BookStructure>,BookStructure把每一行的数据转化为其属性,书名,折扣等等, 然后实现equals和hashcode方法,这样就可以用List的Contains方法,判断是否有相同行的存在,试一下,对你会有帮助,如果还是不明白如何下手,我去公司再帮你补充一下, 代码量在20行之内。
      

  22.   

    LZ我再问一下, 什么是重复数据?哪几个字段都相同的才是重复?c++      X      100      A      123    95%  
    c++      XX      101      AB      123   QQ价格; 出版社; 书价;ISBN都相同吗?是不是ISBN相同就OK呢?Thanks!
      

  23.   

    所有字段都相同才是重复c++      X      100      A      123    95%  
    c++      XX      101      AB      123  QQ这个不算重复但是下面的算重复!
    c++      X      100      A      123    95%  
    c++             100      A             95%
      

  24.   

    但是打折信息也算重复吗? 你给的文件中, 打折字段都没有的也存在呢!!!!!!!!!!那怎么处理你给的例子中, 第二个为什么没有出版社信息???c++      X      100      A      123    95%  
    c++            100      A            95% 另外, 文件中如果缺失某个字段,如bsnd号码,是留一个空格还是不留?文件格式你再详细讲解一下吧!
      

  25.   

    你给的例子中, 第二个为什么没有出版社信息??? 
    ========================
    有的一些信息不全。
    另外, 文件中如果缺失某个字段,如bsnd号码,是留一个空格还是不留?
    ======================================================
    要留的。格式都要对其!某些确实的信息空格补齐你原来的程序运行以后格式不齐先谢啦
      

  26.   

    书名      著译者   出版社    ISBN    打折
    C          Z        V      345    10%
    书名      著译者   出版社     打折
    C          Z        V      10%
    =================================
    这2条算重复的书名      著译者   出版社    ISBN    打折
    C          Z        V      345    10%
    书名      著译者   出版社    ISBN    打折
    C          Z        V      345    22%
    =======================================
    这2条不重复
      

  27.   


    package test;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;public class Test {    public static void main(String[] args) {
            Test test = new Test();
            try {
                test.readFile();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }    public void readFile() throws FileNotFoundException, UnsupportedEncodingException {
            BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt"), "GBK"));
            BufferedWriter bw = null;
            boolean isTitle = true;
            List titles = null;
            List datas = null;
            List allData = new ArrayList();
                    try {
                bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt"), "GBK"));
                writeTitle(bw);            while (bf.ready()) {
                    if (isTitle) {
                        titles = split(bf.readLine(), "[ ]+");
                        isTitle = false;
                    } else {
                        datas = split(bf.readLine(), "[ ]+");
                        isTitle = true;
                    }                if (isTitle) {
                        System.out.println(titles);
                        System.out.println(datas);
                        List data = makeData(titles, datas);
                        
                        if (check(allData, data)) {
    allData.add(data);
    writeData(bw, data);
    }
                    }
                }        } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bf.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (bw != null) {
                    try {
                        bw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }    }
        
        public boolean check(List allData, List cData) {
         int i = 0;
         for (i = 0; i < allData.size(); i++) {
    List oData = (List) allData.get(i);

    for (int j = 0; j < oData.size(); j++) {

    if (oData.get(i).toString().trim().equals("") || cData.get(i).toString().trim().equals("")) {
    continue;
    } else {
    if (!oData.get(i).toString().trim().equals(cData.get(i).toString().trim())) {
    return true;
    }
    }

    }
    }
         if (i == 0) {
         return true;
    } else {
    return false;
    }
        
        }    public void writeTitle(BufferedWriter bw) throws IOException {        // 30   20   10    30  10   5
            String t1 = "图书名";
            String t2 = "作者";
            String t3 = "书价";
            String t4 = "出版社";
            String t5 = "ISBN";
            String t6 = "打折";
            String t = format(t1, 30) + format(t2, 20) + format(t3, 10)+ format(t4, 30) + format(t5, 10) + format(t6, 5)+"\n";
            System.out.println(t);
            bw.write(t);
        }    public List makeData(List titles, List datas) {
         List list = new ArrayList();
        
            String title = "";
            String[] ts1 = { "图书名", "书名", "丛书名" };
            String[] ts2 = { "作者", "作者名", "著译者" };
            String[] ts3 = { "书价", "价钱", "单价" };
            String[] ts4 = { "出版社", "出版处", "出版地" };
            String[] ts5 = { "ISBN", "ISBN号" };
            String[] ts6 = { "打折" };
            int i = 0;
            String temp = "";
            
            // 1
            for (i = 0; i < ts1.length; i++) {
                if (titles.contains(ts1[i])) {
                 temp = format(datas.get(titles.indexOf(ts1[i])).toString(), 30);
                    break;
                }
            }
            if (i >= ts1.length) {
             temp = format("", 30);
            }
            list.add(temp);
            title+=temp;
            
            
            // 2
            for (i = 0; i < ts2.length; i++) {
                if (titles.contains(ts2[i])) {
                 temp = format(datas.get(titles.indexOf(ts2[i])).toString(), 20);
                    break;
                }
            }
            if (i >= ts2.length) {
             temp = format("", 20);
            }
            list.add(temp);
            title+=temp;
            
            //3
            for (i = 0; i < ts3.length; i++) {
                if (titles.contains(ts3[i])) {
                 temp = format(datas.get(titles.indexOf(ts3[i])).toString(), 10);
                    break;
                }
            }
            if (i >= ts3.length) {
             temp = format("", 10);
            }
            list.add(temp);
            title+=temp;
            
            //4
            for (i = 0; i < ts4.length; i++) {
                if (titles.contains(ts4[i])) {
                 temp = format(datas.get(titles.indexOf(ts4[i])).toString(), 30);
                    break;
                }
            }
            if (i >= ts4.length) {
             temp = format("", 30);
            }
            list.add(temp);
            title+=temp;
            
            //5
            for (i = 0; i < ts5.length; i++) {
                if (titles.contains(ts5[i])) {
                 temp = format(datas.get(titles.indexOf(ts5[i])).toString(), 10);
                    break;
                }
            }
            if (i >= ts5.length) {
             temp = format("", 10);
            }
            list.add(temp);
            title+=temp;
            
            //6
            for (i = 0; i < ts6.length; i++) {
                if (titles.contains(ts6[i])) {
                 temp = format(datas.get(titles.indexOf(ts6[i])).toString(), 5);
                    break;
                }
            }
            if (i >= ts6.length) {
             temp = format("", 5);
            }
            list.add(temp);
            title+=temp;
            
            title+="\n";
            System.out.println(title);
            return list;
        }
        
        public void writeData(BufferedWriter bw, List list) throws IOException {
         String data = "";
        
         for (int i = 0; i < list.size(); i++) {
    data+=list.get(i).toString();
    }
        
         bw.write(data+"\n");
        }    public String format(String t, int count) {
            while (t.getBytes().length < count) {
                t += " ";
            }
            return t;
        }    public List split(String text, String regex){
            List result = new ArrayList();
            
            if(null !=text){
                if(regex==null || regex.equals("")){
                    result.add(text);
                }else{        
                    String[] d = text.split(regex);
                    for (int i = 0; i < d.length; i++) {
                        result.add(d[i]);
                    }
                }
            }
            return result;
        }}
      

  28.   

    zhouzongjiu :
    你的代码没处理重复的数据
    书名      著译者  出版社    ISBN    打折 
    C          Z        V      345    10% 
    书名      著译者  出版社    打折 
    C          Z        V      10% 
    ================================= 
    这2条算重复的 书名      著译者  出版社    ISBN    打折 
    C          Z        V      345    10% 
    书名      著译者  出版社    ISBN    打折 
    C          Z        V      345    22% 
    ======================================= 
    这2条不重复 
      

  29.   

    不好意思,是部分数据没去重复:测试输入文件:
    图书名    作者    书价    出版社    ISBN    打折 
    c++        X      100      A         123    95% 
    书名      作者    价钱    出版社    ISBN号  
    c++        X      100      A         123  
    丛书名    作者名  单价    出版处    ISbn    打折 
    java       Y        101      B       234    98% 
    书名      著译者  价钱    出版地    ISBN号 
    C          Z      11      V          345 
    丛书名    单价    出版处    打折    
    RUBY       30      X         60%
    图书名    作者    书价    出版社    ISBN    打折 
    c++        X      100      A         123    95% 
    书名      著译者   出版社    ISBN    打折
    C          Z        V         345     10%
    书名      著译者   出版社     打折
    C          Z        V          10%
    书名      著译者   出版社    ISBN    打折
    C          Z        V         345     22%
    你的输出:图书名                        作者                书价      出版社                        ISBN      打折 
    c++                           X                   100       A                             123       95%  
    java                          Y                   101       B                                       98%  
    C                             Z                   11        V                             345            
    RUBY                                              30        X                                       60%  
    c++                           X                   100       A                             123       95%  
    C                             Z                             V                             345       10%  
    C                             Z                             V                                       10%  

    C                             Z                             V                             345       22%  红色的2条应该算是重复的,呵呵
    先谢谢你的回复
      

  30.   


    这么重要的信息,你不说,怎么做啊还有字段之间的对其, 每个是不是要占固定的几个字节?c++      X      100      A      123    95% 
    第一段占9,第二段占9,第三段占9,第四段占7....等等这都没有说明白,晕了,不想做了
      

  31.   


    package test;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;public class Test {    public static void main(String[] args) {
            Test test = new Test();
            try {
                test.readFile();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }    public void readFile() throws FileNotFoundException, UnsupportedEncodingException {
            BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt"), "GBK"));
            BufferedWriter bw = null;
            boolean isTitle = true;
            List titles = null;
            List datas = null;
            List allData = new ArrayList();
                    try {
                bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt"), "GBK"));
                writeTitle(bw);            while (bf.ready()) {
                    if (isTitle) {
                        titles = split(bf.readLine(), "[ ]+");
                        isTitle = false;
                    } else {
                        datas = split(bf.readLine(), "[ ]+");
                        isTitle = true;
                    }                if (isTitle) {
                        System.out.println(titles);
                        System.out.println(datas);
                        List data = makeData(titles, datas);
                        
                        if (check(allData, data)) {
    writeData(bw, data);
    }
                        allData.add(data);
                    }
                }        } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bf.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (bw != null) {
                    try {
                        bw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }    }
        
        public boolean check(List allData, List cData) {
         int i = 0;
         for (i = 0; i < allData.size(); i++) {
    List oData = (List) allData.get(i);

    for (int j = 0; j < oData.size(); j++) {

    if (oData.get(j).toString().trim().equals("") || cData.get(j).toString().trim().equals("")) {
    continue;
    } else {
    if (!oData.get(j).toString().trim().equals(cData.get(j).toString().trim())) {
    return true;
    }
    }

    }
    }
         if (i == 0) {
         return true;
    } else {
    return false;
    }
        
        }    public void writeTitle(BufferedWriter bw) throws IOException {        // 30   20   10    30  10   5
            String t1 = "图书名";
            String t2 = "作者";
            String t3 = "书价";
            String t4 = "出版社";
            String t5 = "ISBN";
            String t6 = "打折";
            String t = format(t1, 30) + format(t2, 20) + format(t3, 10)+ format(t4, 30) + format(t5, 10) + format(t6, 5)+"\n";
            System.out.println(t);
            bw.write(t);
        }    public List makeData(List titles, List datas) {
         List list = new ArrayList();
        
            String title = "";
            String[] ts1 = { "图书名", "书名", "丛书名" };
            String[] ts2 = { "作者", "作者名", "著译者" };
            String[] ts3 = { "书价", "价钱", "单价" };
            String[] ts4 = { "出版社", "出版处", "出版地" };
            String[] ts5 = { "ISBN", "ISBN号" };
            String[] ts6 = { "打折" };
            int i = 0;
            String temp = "";
            
            // 1
            for (i = 0; i < ts1.length; i++) {
                if (titles.contains(ts1[i])) {
                 temp = format(datas.get(titles.indexOf(ts1[i])).toString(), 30);
                    break;
                }
            }
            if (i >= ts1.length) {
             temp = format("", 30);
            }
            list.add(temp);
            title+=temp;
            
            
            // 2
            for (i = 0; i < ts2.length; i++) {
                if (titles.contains(ts2[i])) {
                 temp = format(datas.get(titles.indexOf(ts2[i])).toString(), 20);
                    break;
                }
            }
            if (i >= ts2.length) {
             temp = format("", 20);
            }
            list.add(temp);
            title+=temp;
            
            //3
            for (i = 0; i < ts3.length; i++) {
                if (titles.contains(ts3[i])) {
                 temp = format(datas.get(titles.indexOf(ts3[i])).toString(), 10);
                    break;
                }
            }
            if (i >= ts3.length) {
             temp = format("", 10);
            }
            list.add(temp);
            title+=temp;
            
            //4
            for (i = 0; i < ts4.length; i++) {
                if (titles.contains(ts4[i])) {
                 temp = format(datas.get(titles.indexOf(ts4[i])).toString(), 30);
                    break;
                }
            }
            if (i >= ts4.length) {
             temp = format("", 30);
            }
            list.add(temp);
            title+=temp;
            
            //5
            for (i = 0; i < ts5.length; i++) {
                if (titles.contains(ts5[i])) {
                 temp = format(datas.get(titles.indexOf(ts5[i])).toString(), 10);
                    break;
                }
            }
            if (i >= ts5.length) {
             temp = format("", 10);
            }
            list.add(temp);
            title+=temp;
            
            //6
            for (i = 0; i < ts6.length; i++) {
                if (titles.contains(ts6[i])) {
                 temp = format(datas.get(titles.indexOf(ts6[i])).toString(), 5);
                    break;
                }
            }
            if (i >= ts6.length) {
             temp = format("", 5);
            }
            list.add(temp);
            title+=temp;
            
            title+="\n";
            System.out.println(title);
            return list;
        }
        
        public void writeData(BufferedWriter bw, List list) throws IOException {
         String data = "";
        
         for (int i = 0; i < list.size(); i++) {
    data+=list.get(i).toString();
    }
        
         bw.write(data+"\n");
        }    public String format(String t, int count) {
            while (t.getBytes().length < count) {
                t += " ";
            }
            return t;
        }    public List split(String text, String regex){
            List result = new ArrayList();
            
            if(null !=text){
                if(regex==null || regex.equals("")){
                    result.add(text);
                }else{        
                    String[] d = text.split(regex);
                    for (int i = 0; i < d.length; i++) {
                        result.add(d[i]);
                    }
                }
            }
            return result;
        }}
      

  32.   

    只要卖出去价格不一样就算是不重复,我的意思对吗?
    也就是 (书的定价)P*M(打折率) 只要不相等 就算不重复 对吗 LZ?
      

  33.   

    图书名                        作者                书价      出版社                        ISBN      打折 
    c++                           X                   100       A                             123       95%  
    java                          Y                   101       B                                       98%  
    C                             Z                   11        V                             345            
    RUBY                                              30        X                                       60%  
    c++                           X                   100       A                             123       95%  
    C                             Z                             V                             345       10%  
    C                             Z                             V                             345       22%  
    这2条记录完全一样,但是你没去掉重复的1条
      

  34.   

    TO zhouzongjiu :
    对你的代码,我的测试输入:
    图书名    作者    书价    出版社    ISBN    打折 
    c++        X      100      A        123    95% 
    书名      作者    价钱    出版社    ISBN号  
    c++        X      100      A        123  
    丛书名    作者名  单价    出版处    ISbn    打折 
    java      Y        101      B      234    98% 
    书名      著译者  价钱    出版地    ISBN号 
    C          Z      11      V          345 
    丛书名    单价    出版处    打折    
    RUBY      30      X        60% 
    图书名    作者    书价    出版社    ISBN    打折 
    c++        X      100      A        123    95% 
    书名      著译者  出版社    ISBN    打折 
    C          Z        V        345    10% 
    书名      著译者  出版社    打折 
    C          Z        V          10% 
    书名      著译者  出版社    ISBN    打折 
    C          Z        V        345    22%  
    得到的输出:
    图书名                        作者                书价      出版社                        ISBN      打折 
    c++                           X                   100       A                             123       95%  
    java                          Y                   101       B                                       98%  
    C                             Z                   11        V                             345            
    RUBY                                              30        X                                       60%  
    c++                           X                   100       A                             123       95%  
    C                             Z                             V                             345       10%  
    C                             Z                             V                                       10%  
    C                             Z                             V                             345       22%  第1和第5重复,第6和第7也是重复的
      

  35.   

    这样行吗?package test;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;public class Test {    public static void main(String[] args) {
            Test test = new Test();
            try {
                test.readFile();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }    public void readFile() throws FileNotFoundException, UnsupportedEncodingException {
            BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt"), "GBK"));
            BufferedWriter bw = null;
            boolean isTitle = true;
            List titles = null;
            List datas = null;
            List allData = new ArrayList();
                    try {
                bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt"), "GBK"));
                writeTitle(bw);            while (bf.ready()) {
                    if (isTitle) {
                        titles = split(bf.readLine(), "[ ]+");
                        isTitle = false;
                    } else {
                        datas = split(bf.readLine(), "[ ]+");
                        isTitle = true;
                    }                if (isTitle) {
                        System.out.println(titles);
                        System.out.println(datas);
                        List data = makeData(titles, datas);
                        
                        if (check(allData, data)) {
                         allData.add(data);
    writeData(bw, data);
    }
                        
                    }
                }        } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bf.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (bw != null) {
                    try {
                        bw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }    }
        
        public boolean check(List allData, List cData) {
         int i = 0;
         for (i = 0; i < allData.size(); i++) {
    List oData = (List) allData.get(i);
    boolean flg = false;

    for (int j = 0; j < oData.size(); j++) {
    if (cData.get(j).toString().trim().equals("")) {
    continue;
    } else {
    if (oData.get(j).toString().trim().equals(cData.get(j).toString().trim())) {
    flg = true;
    } else {
    flg = false;
    break;
    }
    }

    }

    if (flg) {
    return false;
    }
    }
         return true;
        }    public void writeTitle(BufferedWriter bw) throws IOException {        // 30   20   10    30  10   5
            String t1 = "图书名";
            String t2 = "作者";
            String t3 = "书价";
            String t4 = "出版社";
            String t5 = "ISBN";
            String t6 = "打折";
            String t = format(t1, 30) + format(t2, 20) + format(t3, 10)+ format(t4, 30) + format(t5, 10) + format(t6, 5)+"\n";
            System.out.println(t);
            bw.write(t);
        }    public List makeData(List titles, List datas) {
         List list = new ArrayList();
        
            String title = "";
            String[] ts1 = { "图书名", "书名", "丛书名" };
            String[] ts2 = { "作者", "作者名", "著译者" };
            String[] ts3 = { "书价", "价钱", "单价" };
            String[] ts4 = { "出版社", "出版处", "出版地" };
            String[] ts5 = { "ISBN", "ISBN号" };
            String[] ts6 = { "打折" };
            int i = 0;
            String temp = "";
            
            // 1
            for (i = 0; i < ts1.length; i++) {
                if (titles.contains(ts1[i])) {
                 temp = format(datas.get(titles.indexOf(ts1[i])).toString(), 30);
                    break;
                }
            }
            if (i >= ts1.length) {
             temp = format("", 30);
            }
            list.add(temp);
            title+=temp;
            
            
            // 2
            for (i = 0; i < ts2.length; i++) {
                if (titles.contains(ts2[i])) {
                 temp = format(datas.get(titles.indexOf(ts2[i])).toString(), 20);
                    break;
                }
            }
            if (i >= ts2.length) {
             temp = format("", 20);
            }
            list.add(temp);
            title+=temp;
            
            //3
            for (i = 0; i < ts3.length; i++) {
                if (titles.contains(ts3[i])) {
                 temp = format(datas.get(titles.indexOf(ts3[i])).toString(), 10);
                    break;
                }
            }
            if (i >= ts3.length) {
             temp = format("", 10);
            }
            list.add(temp);
            title+=temp;
            
            //4
            for (i = 0; i < ts4.length; i++) {
                if (titles.contains(ts4[i])) {
                 temp = format(datas.get(titles.indexOf(ts4[i])).toString(), 30);
                    break;
                }
            }
            if (i >= ts4.length) {
             temp = format("", 30);
            }
            list.add(temp);
            title+=temp;
            
            //5
            for (i = 0; i < ts5.length; i++) {
                if (titles.contains(ts5[i])) {
                 temp = format(datas.get(titles.indexOf(ts5[i])).toString(), 10);
                    break;
                }
            }
            if (i >= ts5.length) {
             temp = format("", 10);
            }
            list.add(temp);
            title+=temp;
            
            //6
            for (i = 0; i < ts6.length; i++) {
                if (titles.contains(ts6[i])) {
                 temp = format(datas.get(titles.indexOf(ts6[i])).toString(), 5);
                    break;
                }
            }
            if (i >= ts6.length) {
             temp = format("", 5);
            }
            list.add(temp);
            title+=temp;
            
            title+="\n";
            System.out.println(title);
            return list;
        }
        
        public void writeData(BufferedWriter bw, List list) throws IOException {
         String data = "";
        
         for (int i = 0; i < list.size(); i++) {
    data+=list.get(i).toString();
    }
        
         bw.write(data+"\n");
        }    public String format(String t, int count) {
            while (t.getBytes().length < count) {
                t += " ";
            }
            return t;
        }    public List split(String text, String regex){
            List result = new ArrayList();
            
            if(null !=text){
                if(regex==null || regex.equals("")){
                    result.add(text);
                }else{        
                    String[] d = text.split(regex);
                    for (int i = 0; i < d.length; i++) {
                        result.add(d[i]);
                    }
                }
            }
            return result;
        }}