我最近在学做唐诗宋词这个小软件,而那些诗词都是从通过File文件将其导入进去,我想把File文件内的内容将其截取成每一首一首的诗,在进行截取它的诗歌名、作者名和诗句,这要如何截取啊

解决方案 »

  1.   

    把文件读进内存,然后判断"\xd\xa",就是按行分析,找出一定规律后,针对性的写截取代码
      

  2.   

    你的文件是什么格式的?txt?
    如果有规律的话可以用工具导入到exl里,然后再生成sql数据库文件。
      

  3.   

    用正则表达式吧,如果不懂正则表达式的话,去baidu搜索,30分钟学会正则表达式
      

  4.   

    用正则当然是最好的方法,但是自己解析也不难,你检查一下,看看是否格式都是这样:
    《标题》
    作者:XXX
    内容【注解】:
    1、XXX
    ...【韵译】:
    XXX
    以及传说中的分割线
    =============================确定后分析就是了,首先把文件都读进内存,然后挨个分析文字,比如遇到“《”,做个标记--标题开始,遇到“》”,把从标题开始地方到现在的中间内容保存为标题,以此类推,把整首诗分析出来,遇到分割线,循环处理下一首,我之前说的“\xd\xa”,是回车换行符
      

  5.   

    private static int pos = 0; 

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
    File mFile = new File("E:\\1.txt");
    int fileSize = (int) mFile.length();
    InputStream in = null ;
    in = new FileInputStream(mFile) ;
    byte[] bt = new byte[fileSize];

     String title, author, text, note, trans;

    in.read(bt);

    title = getTitle(bt, fileSize);
            author = getAuthor(bt, fileSize);
            text = getText(bt, fileSize);
            note = getNote(bt, fileSize);
            trans = getTrans(bt, fileSize);
            
    System.out.println("title: " + title);
    System.out.println("author: " + author);
    System.out.println("text: " + text);
    System.out.println("note: " + note);
    System.out.println("trans: " + trans);
    } private static String getTitle(byte[] bt, int fileSize) 
    {
    String title = null, str = null;;
    int titleStart = 0;
    for(int i = pos; i < fileSize - 1; i += 2)
    {
    str = new String(bt, i, 2);
    if(str.equals("《"))
    {
    titleStart = i + 2;
    }
    else if(str.equals("》"))
    {
    pos = i;
    int titleLength = pos - titleStart;
    byte[] titleBt = new byte[titleLength];
    System.arraycopy(bt, titleStart, titleBt, 0, titleLength);
    title = new String(titleBt);
    break;
    }
    }
    return title;
    }

    private static String getAuthor(byte[] bt, int fileSize)
    {
    String author = null, str = null;
    int authorStart = 0;
    authorStart = pos + 10;
    for(int i = pos; i < fileSize - 1; i += 2)
    {
    str = new String(bt, i, 2);
                if((authorStart != 0) && (i > authorStart)
    &&(str.indexOf("\n") != -1))
    {
    pos = i;
    int authorLength = pos - authorStart;
    byte[] authorBt = new byte[authorLength];
    System.arraycopy(bt, authorStart, authorBt, 0, authorLength);
    author = new String(authorBt);
    break;
    }
    }
    return author;
    }

    private static String getText(byte[] bt, int fileSize)
    {
    String text = null, str = null;
    int textStart = 0, textEnd = 0;
    textStart = pos + 2;
    for(int i = pos; i < fileSize - 1; i += 2)
    {
    str = new String(bt, i, 2);
    if(str.equals("【"))
    {
    textEnd = i - 2;
    int textLength = textEnd - textStart;
    byte[] textBt = new byte[textLength];
    System.arraycopy(bt, textStart, textBt, 0, textLength);
    text = new String(textBt);
    pos = i;
    break;
    }
    }
    return text;
    }

    private static String getNote(byte[] bt, int fileSize)
    {
    String note = null, str = null;
    int noteStart = 0, noteEnd = 0;
    noteStart = pos + 12;
    for(int i = noteStart; i < fileSize - 1; i += 2)
    {
    str = new String(bt, i, 2);
    if(str.equals("【"))
    {
    noteEnd = i - 2;
    int noteLength = noteEnd - noteStart;
    byte[] noteBt = new byte[noteLength];
    System.arraycopy(bt, noteStart, noteBt, 0, noteLength);
    note = new String(noteBt);
    pos = i;
    break;
    }
    }
    return note;
    }

    private static String getTrans(byte[] bt, int fileSize)
    {
    String trans = null, str = null;
    int transStart = 0, transEnd = 0;
    transStart = pos + 12;
    for(int i = transStart; i < fileSize - 1; i += 2)
    {
    str = new String(bt, i, 2);
    if(str.equals("=="))
    {
    transEnd = i - 2;
    int noteLength = transEnd - transStart;
    byte[] noteBt = new byte[noteLength];
    System.arraycopy(bt, transStart, noteBt, 0, noteLength);
    trans = new String(noteBt);
    pos = i;
    break;
    }
    }
    return trans;
    }