2012-07-16 250 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

你可以採取每個排列的時間併爲子的話,你不要總是使用完整的字符串長度。

相關問題