当前位置: 代码迷 >> J2EE >> 小小逻辑,烦了小弟我几个小时.求教高手
  详细解决方案

小小逻辑,烦了小弟我几个小时.求教高手

热度:66   发布时间:2016-04-22 02:56:39.0
小小逻辑,烦了我几个小时....求教高手!
问题:文件的内容都能读取到,读取之后我要存放到tm(实体类)对象里面,最后放入mlist集合,可是读文件的时候有多少行就回创建多少个对象。比如:现在Mobiles.txt文件现有8行,在读取的时候便会创建8个对象,可实际上只要2个对象,然后把这2个对象放入到mlist集合中。因为每4行为一个对象,高手解决下....万分感谢!

mobile_number=13787192029
card_number=423254234512345
available=N
type=SIM

mobile_number=13787192039
card_number=423254234512345
available=Y
type=UIM
。。。。。
读取的目标文件:D:\Mobiles.txt


public void test(){
String lineTxt="";  
BufferedReader bf=null;
List<TMobiles> mlist =null; //存放实体类的集合
TMobiles tm =null; //自定义的实体类

while((lineTxt = bf.readLine()) != null)
{
tm = new TMobiles();
if((lineTxt.substring(0,4)).equals("mobi"))
{
tm.setMobile_number(lineTxt.substring(lineTxt.indexOf("=")+1));
}
else if((lineTxt.substring(0,4)).equals("card"))
{
tm.setCard_number(lineTxt.substring(lineTxt.indexOf("=")+1));
}
else if((lineTxt.substring(0,4)).equals("avai"))
{
tm.setIs_available(lineTxt.substring(lineTxt.indexOf("=")+1));
}
else if((lineTxt.substring(0,4)).equals("type"));
{
tm.setMobile_type(lineTxt.substring(lineTxt.indexOf("=")+1));
}

mlist.add(tm);

 }
}

------解决方案--------------------
Java code
public void test(){    String lineTxt="";       BufferedReader bf=null;    List<TMobiles> mlist = new ArrayList<TMobiles>; //集合要new好一个对象    TMobiles tm =null; //自定义的实体类    while((lineTxt = bf.readLine()) != null) {        if((lineTxt.substring(0,4)).equals("mobi")){ //遇到TMobiles类的开头数据才new            tm = new TMobiles();            mlist.add(tm); //同时add到mlist            tm.setMobile_number(lineTxt.substring(lineTxt.indexOf("=")+1));        } else if((lineTxt.substring(0,4)).equals("card")) {            tm.setCard_number(lineTxt.substring(lineTxt.indexOf("=")+1));        } else if((lineTxt.substring(0,4)).equals("avai")) {            tm.setIs_available(lineTxt.substring(lineTxt.indexOf("=")+1));        } else if((lineTxt.substring(0,4)).equals("type")) {            tm.setMobile_type(lineTxt.substring(lineTxt.indexOf("=")+1));        }    }}
------解决方案--------------------
十一真是无聊啊……
楼主的问题主要是逻辑没处理好,加上有语法错误,参考下,具体见注释:
Java code
import java.io.*;import java.util.*;// 模拟这个类,为编译通过class TMobiles {    void setMobile_number(String arg) {    }    void setCard_number(String arg) {    }    void setIs_available(String arg) {    }    void setMobile_type(String arg) {    }}public class ReadFile {    // 设置所读文件的路径,这里为当前路径下的Mobiles.txt    private static String file2ReadPath = "./Mobiles.txt";    public static void test() {        String lineTxt = null;         BufferedReader br = null;        // 先构造mlist        List<TMobiles> mlist = new ArrayList<TMobiles>();;        TMobiles tm = null;        try {            // 打开流            br = new BufferedReader(new FileReader(file2ReadPath), 1024);            while ((lineTxt = br.readLine()) != null) {                // 匹配mobile_number=xxx的行,以下类似                if (lineTxt.matches("^\\s*mobile_number=\\d+\\s*$")) {                    // 碰到以mobile_number=xxx的行就创建这个对象                    System.out.println(lineTxt);                    tm = new TMobiles();                    tm.setMobile_number(lineTxt.substring(lineTxt.indexOf("=") + 1));                    // 直接放入mlist                    mlist.add(tm);                } else if (lineTxt.matches("^\\s*card_number=\\d+\\s*$")) {                    System.out.println(lineTxt);                    tm.setCard_number(lineTxt.substring(lineTxt.indexOf("=") + 1));                } else if (lineTxt.matches("^\\s*available=[YN]+\\s*$")) {                    System.out.println(lineTxt);                    tm.setIs_available(lineTxt.substring(lineTxt.indexOf("=") + 1));                } else if (lineTxt.matches("^\\s*type=.*$")) {                    System.out.println(lineTxt);                    tm.setMobile_type(lineTxt.substring(lineTxt.indexOf("=") + 1));                }            }            // 输出总共构造了多少个对象            System.out.println("mlist.size() is: " + mlist.size());        } catch (IOException e) {            e.printStackTrace();        } finally {            // 关闭流            if (br != null) {                try {                    br.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }    public static void main(String[] args) {        test();    }}
  相关解决方案