diff options
Diffstat (limited to 'BJC-Utils2/src')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/funcutils/StringUtils.java | 14 | ||||
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/SimpleBlockReader.java | 15 |
2 files changed, 22 insertions, 7 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcutils/StringUtils.java b/BJC-Utils2/src/main/java/bjc/utils/funcutils/StringUtils.java index 6e24e50..62f78f5 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/funcutils/StringUtils.java +++ b/BJC-Utils2/src/main/java/bjc/utils/funcutils/StringUtils.java @@ -1,6 +1,8 @@ package bjc.utils.funcutils; import java.util.Deque; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import com.ibm.icu.text.BreakIterator; @@ -181,4 +183,14 @@ public class StringUtils { return count; } -}
\ No newline at end of file + + public static int countMatches(final String value, final String pattern) { + Matcher mat = Pattern.compile(pattern).matcher(value); + + int num = 0; + while(mat.find()) + num += 1; + + return num; + } +} diff --git a/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/SimpleBlockReader.java b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/SimpleBlockReader.java index 87083d1..38d9ac5 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/SimpleBlockReader.java +++ b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/SimpleBlockReader.java @@ -7,6 +7,7 @@ import java.util.NoSuchElementException; import java.util.Scanner; import java.util.regex.Pattern; +import bjc.utils.funcutils.StringUtils; /** * Simple implementation of {@link BlockReader} * @@ -20,7 +21,6 @@ public class SimpleBlockReader implements BlockReader { /* * I/O source for blocks. */ - private final LineNumberReader lnReader; private final Scanner blockReader; /* @@ -28,6 +28,7 @@ public class SimpleBlockReader implements BlockReader { */ private Block currBlock; private int blockNo; + private int lineNo; /** * Create a new block reader. @@ -40,14 +41,14 @@ public class SimpleBlockReader implements BlockReader { * The source to read blocks from. */ public SimpleBlockReader(final String blockDelim, final Reader source) { - lnReader = new LineNumberReader(source); - - blockReader = new Scanner(lnReader); + blockReader = new Scanner(source); final String pattern = String.format("(?:%s)|\\Z", blockDelim); final Pattern pt = Pattern.compile(pattern, Pattern.MULTILINE); blockReader.useDelimiter(pt); + + lineNo = 0; } @Override @@ -63,9 +64,11 @@ public class SimpleBlockReader implements BlockReader { @Override public boolean nextBlock() { try { - final int blockStartLine = lnReader.getLineNumber(); + final int blockStartLine = lineNo; final String blockContents = blockReader.next(); - final int blockEndLine = lnReader.getLineNumber(); + final int blockEndLine = lineNo + StringUtils.countMatches(blockContents, "\\R"); + + lineNo = blockEndLine; blockNo += 1; currBlock = new Block(blockNo, blockContents, blockStartLine, blockEndLine); |
