Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 1&1 Internet AG, http://www.1and1.org
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU Lesser General Public License as published by
   * the Free Software Foundation; either version 2 of the License,
   * or (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  * See the GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package net.sf.beezle.sushi.fs;
 
 import java.io.Reader;
 import java.util.List;
Reads a node line-by-line. In some sense, this class is similar to Buffer, but operates on chars.
 
 public class LineReader {
     public static final int INITIAL_BUFFER_SIZE = 256;
 
     private final Reader reader;

    
line separator
 
     private final LineFormat format;

    
current line number
 
     private int line;
 
     private final CharArraySequence buffer;
 
     public LineReader(Reader readerLineFormat format) {
         this(readerformat);
     }
 
     public LineReader(Reader readerLineFormat formatint initialBufferSize) {
         this. = reader;
         this. = format;
         this. = 0;
         this. = new CharArraySequence(0, 0, new char[initialBufferSize]);
     }
 
     //--
 
    

Returns:
number of the line return by the last call to next. First line has number 1.
 
     public int getLine() {
         return ;
     }
 
     public Reader getReader() {
         return ;
     }
 
     public LineFormat getFormat() {
         return ;
     }
 
     public void close() throws IOException {
         .close();
     }
 
     //--
 
    
Never closes the underlying reader.

Returns:
next line of null for end of file
 
     public String next() throws IOException {
         String result;
         int len;
         Matcher matcher;
 
         while (true) {
             matcher = ..matcher();
             if (matcher.find()) {
                 len = matcher.end();
                 if (. + len == .) {
                     // make sure we match the longest separator possible
                     if (.isFull()) {
                         .grow();
                     }
                     .fill();
                     matcher = ..matcher();
                     if (!matcher.find()) {
                         throw new IllegalStateException();
                     }
                     len = matcher.end();
                 }
                 result = new String(... == .. ? len : matcher.start());
                 . += len;
             } else {
                 if (.isFull()) {
                     .grow();
                 }
                if (.fill()) {
                    continue;
                } else {
                    if (.isEmpty()) {
                        // EOF
                        return null;
                    } else {
                        result = .eat();
                    }
                }
            }
            // always bump, even if we don't return the line 
            ++;
            if (. == ..) {
                result = result.trim();
            }
            if (!..matcher(result).matches()) {
                return result;
            }
        }
    }
    public List<Stringcollect() throws IOException {
        return collect(new ArrayList<String>());
    }

    

Returns:
result
    public List<Stringcollect(List<Stringresultthrows IOException {
        String line;
        while (true) {
            line = next();
            if (line == null) {
                close();
                return result;
            }
            result.add(line);
        }
    }
    private static class CharArraySequence implements CharSequence {
        private int start;
        private int end;
        private char[] chars;
        public CharArraySequence(int startint endchar[] chars) {
            this. = start;
            this. = end;
            this. = chars;
        }
        @Override
        public int length() {
            return  - ;
        }
        @Override
        public char charAt(int index) {
            return [ + index];
        }
        @Override
        public CharSequence subSequence(int startint end) {
            return new CharArraySequence(this. + startthis. + endthis.);
        }
        public boolean isEmpty() {
            return  == ;
        }
        public boolean isFull() {
            return  == .;
        }
        public String eat() {
            String result;
            result = new String( - );
             = ;
            return result;
        }
        public void grow() {
            char[] tmp;
            if ( != 0) {
                System.arraycopy(, 0,  - );
                 -= ;
                 = 0;
            } else {
                tmp = new char[. * 3 / 2 + 10];
                System.arraycopy(, 0, tmp, 0, );
                 = tmp;
            }
        }
        public boolean fill(Reader srcthrows IOException {
            int len;
            len = src.read(. - );
            if (len != -1) {
                 += len;
                return true;
            } else {
                return false;
            }
        }
    }
New to GrepCode? Check out our FAQ X