diff options
Diffstat (limited to 'src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java')
| -rw-r--r-- | src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java | 67 |
1 files changed, 65 insertions, 2 deletions
diff --git a/src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java b/src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java index 5793f02..04a2bcb 100644 --- a/src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java +++ b/src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java @@ -22,6 +22,70 @@ import java.util.concurrent.TimeUnit; */ public class ParallelWordCount { + private static final Integer NEWVALUE = new Integer(1); + + /** + * Counts words in one line. + * + * @author $Author: $ + * @version $Revision: $, $Date: $ UTC + */ + private class LineWordCount implements Runnable + { + + private String[] lineArray; + + /** + * Creates the object which will be threaded. + * + * @param wordMap + * The wordMap into which the counts should be added. + * @param line + * The line to be counted. + */ + public LineWordCount(String line) + { + if (line == null) + { + throw new IllegalArgumentException("Line can't be null."); + } + if (line.isEmpty()) + { + throw new IllegalArgumentException("Line can't be empty."); + } + lineArray = line.split("[^\\p{IsAlphabetic}\\p{Digit}]+"); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Runnable#run() + */ + @Override + public final void run() + { + for (String word : lineArray) + { + // Split creates empty String, if first char is a split char. + if (!word.isEmpty()) + { + word = word.toLowerCase(); + boolean success; + + do + { + success = true; + Integer tmp = wordMap.putIfAbsent(word, NEWVALUE); + if (tmp != null) + { + success = wordMap.replace(word, tmp, tmp + 1); + } + } + while (!success); + } + } + } + } private static final int TIMEOUT = 30; @@ -43,7 +107,6 @@ public class ParallelWordCount */ public final void readFile(File file) { - try (BufferedReader f = new BufferedReader(new FileReader(file))) { if (wordMap == null) @@ -60,7 +123,7 @@ public class ParallelWordCount while ((line = f.readLine()) != null) { - Runnable worker = new LineWordCount(wordMap, line); + Runnable worker = new LineWordCount(line); executer.execute(worker); } |
