Compile the Java code, then execute by saying something like "java palrobot fname lname" or "java palrobot adj noun -s verb adj noun -s" or "java palrobot web2a.txt web2a.txt", where fname, lname, adj, noun, verb and web2a.txt are text file wordlists (one entry per row which will be parsed down to an alphanumeric string). While each wordlist loads, you'll be told about any palindromes in the list.

//v 1.3

import java.awt.*;import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;

class palrobot{

static String justup(String sss)
{String ttt = "";
  int i = -1;
  while (++i < sss.length())
     {if (Character.isLetter(sss.charAt(i))) ttt += Character.toUpperCase(sss.charAt(i)); else
      if (Character.isDigit(sss.charAt(i))) ttt += Character.toUpperCase(sss.charAt(i));
     }if (ttt.equals(rev(ttt))) if (ttt.length() > 1)
System.out.println("Drome in wordlist: " + sss + " uses the letters " + ttt);
return(ttt);
}

static String rev(String sss)
{return(new StringBuffer(sss).reverse().toString());}

static int ispal(String s1)
{if (s1.equals(rev(s1))) return (1); else return (0);}

static int stats(String s1, String s2)
{int i;
i = s1.length();
if (s2.length() < i) i = s2.length();
if (s1.substring(0,i).equals(s2.substring(0,i))) return(1); else return(0);
}

// main method
public static void main(String[] args) {
int wc; int hl[] = new int[10]; int k = 0; int hi, lo, ac;
String w[] = new String[11];
String b, b2, front, back;
FileInputStream fi;
StringTokenizer st[] = new StringTokenizer[11];
int i2, i3, i4, status, n; int ww[] = new int[10];

w[0] = "";
b = "";
ac = -1; i2 = -1;
i3 = args.length;
status = 1; n = -1;
System.out.println("Arguments:" + args.length);

long t0 = System.currentTimeMillis();
while (++i2 < args.length)
try {
     i4 = i2; ++ac;
     if (args[i2].charAt(0) == '-') w[i4] = justup(args[i2].substring(1)); else
         {
         fi = new FileInputStream(args[i2]);
         InputStreamReader reader = new InputStreamReader(fi);
         BufferedReader br = new BufferedReader(reader);
         b = br.readLine();
         w[i4] = "";
         System.out.println("AA");
         k = 0;
         while (br != null)
             {if (b == "") break;
             else {if (b.length() > 0) w[i4] += justup(b) + " "; k++;}
         b = br.readLine();
         }
         System.out.println("DDD");
         fi.close();
     }
   }
catch (Exception e) {System.out.println("Clean escape! Error: " + e);}
long et = System.currentTimeMillis();
System.out.println((et-t0) + " milliseconds");
System.out.println("All loaded");
long lt = System.currentTimeMillis();
System.out.println((lt-t0) + " milliseconds");

i2 = -1;

// Let's look for dromes!

wc = -1; status = 1; front = ""; back = ""; hi = i3; lo = -1;
String s[] = new String[11]; String ff, bb, dr;
while (1 == 1)
{
if (status == -1) {if (hl[wc] == 0) {--wc;--lo;} else ++hi;}
if (status < 1) // Remove last attempt
     {if (hl[wc] == 0) front = front.substring(0, front.length()-s[wc].length());
     else back = back.substring(0, back.length()-s[wc].length());}
if (status == 1)
     {if (front.length() >= back.length()) {++wc; ++lo; ww[wc] = lo; hl[wc] = 0;}
     else {--hi; ++wc; ww[wc] = hi; hl[wc] = 1;}
     st[wc] = new StringTokenizer(w[ww[wc]]);
     }
if (true == st[wc].hasMoreTokens()) // Go to the next entry in current w[]
     {s[wc] = st[wc].nextToken();
     if (hl[wc] == 0) front += s[wc]; else back += rev(s[wc]);
     if (stats(front, back) == 1) status = 1; else status = 0;
     if (status == 1) if ((hi-lo) == 1)
         {if (ispal(front + rev(back)) == 1)
           {i2 = -1; dr = ""; while (++i2 < args.length) dr = dr + " " + s[i2];
           System.out.println("DROME = " + front + " " + rev(back) + dr);}
         status = 0;
     }
     else
         {if (stats(front, rev(back)) == 1) status = 1; else status = 0;}
     } else status = -1;
}
}
}