summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2014-12-10 14:32:44 +0100
committerStefan Suhren <suhren.stefan@fh-swf.de>2014-12-10 14:32:44 +0100
commit0669d3e06127a04c2a419a10664a259847e194fb (patch)
tree3e8bdf3e41c635d35252127659ebb6cc2943417a /src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java
parentcfd8642679d1d105a275d793f7049b4a24fda4b7 (diff)
downloadJava1-0669d3e06127a04c2a419a10664a259847e194fb.tar.gz
Java1-0669d3e06127a04c2a419a10664a259847e194fb.zip
Assignment No.10 after correction
Diffstat (limited to 'src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java')
-rw-r--r--src/de/fhswf/in/inf/java1/aufgabe10/ParallelWordCount.java67
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);
}