2012-07-16 35 views
1

我需要一个java程序,它应该给出字符串组合中的所有字典单词。 示例:如果给定的字符串是“IOSMNEAB”,它是长度为8 我需要像IS,NAME,SOME,SON词语的字符串,平均等。java程序找到给定字符串中的所有字典单词

我的解决办法:我提出的所有排列字符串并在已经创建的词典数据库中搜索。 但它只给出8位长度的单词。我需要长度> = 2和< = 8的单词。 请帮助:-(

import java.sql.DriverManager; 
    import java.sql.SQLException; 
    import java.util.Random; 
    import java.sql.*; 
    public final class Combination1 {  

    static String url = "jdbc:mysql://localhost:3306/file"; 
    static int count; 
    static String Vowel = "AEIOU"; 
    static String Consonant = "BCDFGHJKLMNPQRSTVWXYZ"; 
    static StringBuffer word; 
    static Connection con; 
    static ResultSet rs; 
    static PreparedStatement preparedStatement; 
    static Random randomGenerator = new Random(); 

    public static final void main(String... aArgs){ 
    String str=""; 
    for(int i=0;i<5;i++){ 
     char a = getRandomConsonant(); 
     str = str+a;} 
    for(int i=0;i<3;i++){ 
     char a = getRandomVowel(); 
     str = str+a;} 
    StringBuffer strBuf = new StringBuffer(str); 
    count = 0; 
    doPerm(strBuf,str.length()); 

    if(count>=1){ 
     try 
      { 
      Class.forName("com.mysql.jdbc.Driver"); 
      try 
      {    
       con = DriverManager.getConnection(url,"root","1234"); 
       preparedStatement = con.prepareStatement("insert into FILE.WORDS values (?,?)"); 
       preparedStatement.setString(1, str); 
       preparedStatement.setInt(2, count); 
       preparedStatement.executeUpdate(); 
      } 

      catch (SQLException ex) 
      { 
       ex.printStackTrace(); 
      } 
      } 
     catch(ClassNotFoundException e) 
      { 
      System.out.println(e); 
      } 
    } 

     } 

     private static char getRandomVowel(){ 
    int randomInt = randomGenerator.nextInt(4); 
    return Vowel.charAt(randomInt); 
    } 
     private static char getRandomConsonant(){ 
    int randomInt = randomGenerator.nextInt(20); 
    return Consonant.charAt(randomInt); 
    } 
     private static void swap(StringBuffer str, int pos1, int pos2){ 
    char t1 = str.charAt(pos1); 
    str.setCharAt(pos1, str.charAt(pos2)); 
    str.setCharAt(pos2, t1); 
} 
    private static void doPerm(StringBuffer str, int index){ 

    if(index == 0) 
    { 
    System.out.println(str); 
    try 
     { 
     String word = str.toString(); 
     Class.forName("com.mysql.jdbc.Driver"); 
     try 
     {    
      con = DriverManager.getConnection(url,"root","1234"); 
      preparedStatement = con.prepareStatement("SELECT * FROM DICT WHERE word=?"); 
      preparedStatement.setString(1, word); 
      rs = preparedStatement.executeQuery(); 
      rs = preparedStatement.getResultSet(); 
      if(rs.next()){ 
       count++; 
      } 
     } 

     catch (SQLException ex) 
     { 
      ex.printStackTrace(); 
     } 
     } 
    catch(ClassNotFoundException e) 
     { 
     System.out.println(e); 
     } 
    } 


    else { 
     doPerm(str, index-1); 
     int currPos = str.length()-index; 
     for (int i = currPos+1; i < str.length(); i++) { 
      swap(str,currPos, i); 
      doPerm(str, index-1); 
      swap(str,i, currPos); 
     } 
    } 
} 
    } 
+0

发布您的代码? – javajavajava 2012-07-16 13:16:51

回答

1

在现有的代码,假定它有效地查找单词,8℃ hars length,你只需要用permuted.contains(dictionaryWord)替换permuted.equals(dictionaryWord)这个测试:如果你的一部分排列的单词等于字典单词,这将返回true。

0

你可以采取每个排列的时间并为子的话,你不要总是使用完整的字符串长度。

相关问题