summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java')
-rw-r--r--src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java b/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
new file mode 100644
index 0000000..cebf2bc
--- /dev/null
+++ b/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
@@ -0,0 +1,70 @@
+package bjc.rgens.text.markov;
+
+import java.util.Map;
+
+/**
+ * A standalone Markov generator.
+ *
+ * @author bjculkin
+ */
+public class StandaloneMarkov {
+ /* The order of the generator. */
+ private int ord;
+
+ /* The generators to use. */
+ private Map<String, Markov> hash;
+ /* The initial string. */
+ private String first;
+
+ /**
+ * Create a new standalone Markov generator.
+ *
+ * @param order
+ * The order of this generator.
+ *
+ * @param markovHash
+ * The generators to use.
+ *
+ * @param firstSub
+ * The string to start out with.
+ */
+ public StandaloneMarkov(int order, Map<String, Markov> markovHash, String firstSub) {
+ ord = order;
+ hash = markovHash;
+ first = firstSub;
+ }
+
+ /**
+ * Generate random text from the markov generator.
+ *
+ * @param charsToGenerate
+ * The number of characters of text to generate.
+ *
+ * @return
+ * The randomly generate text.
+ */
+ public String generateTextFromMarkov(int charsToGenerate) {
+ StringBuilder text = new StringBuilder();
+
+ for (int i = ord; i < charsToGenerate; i++) {
+ if (i == ord) {
+ text.append(first);
+
+ if (text.length() > ord) i = text.length();
+ }
+
+ String sub = text.substring(i - ord, i);
+ Markov tmp = hash.get(sub);
+
+ if (tmp != null) {
+ Character nextChar = tmp.random();
+
+ text.append(nextChar);
+ } else {
+ i = ord - 1;
+ }
+ }
+
+ return text.toString();
+ }
+}