2014-08-31 38 views
2

我已經差不多完成了這個任務,但還沒有完成。所以我需要的是例如我給出單詞DOG,程序將查看一個文本文件並返回DOG和GOD,也就是說可以由僅給出的可能性生成的單詞。我的代碼給了我所有包含'D','O'和'G'的單詞。我的代碼是這樣的:將給定單詞與相同大小的組合匹配的Java

public class JavaReadTextFile { 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 
     ReadFile rf = new ReadFile(); 

     String filename = "/Users/Elton/Desktop/OSWI.txt"; 
     String wordinput; 
     String wordarray[] = new String[1]; 
     System.out.println("Input Characters: "); 
     wordinput = input.nextLine(); 
     wordarray[0] = wordinput; 

     System.out.println(wordinput.length()); 

     try { 
      String[] lines = rf.readLines(filename); 

      for (String line : lines) { 
       if (line.matches(wordarray[0] + ".*")) { 
        System.out.println(line); 
       } 
      } 
     } catch (IOException e) { 
      System.out.println("Unable to create " + filename + ": " + e.getMessage()); 
     } 
    } 
} 

-----然後我有:

public class ReadFile { 
    String [] cName = new String [100]; 

    public String[] readLines(String filename) throws IOException { 
     FileReader fileReader = new FileReader(filename); 

     BufferedReader bufferedReader = new BufferedReader(fileReader); 
     List<String> lines = new ArrayList<String>(); 
     String line = null; 

     while ((line = bufferedReader.readLine()) != null) { 
      cName[0] = line.split(" ")[0]; 
      lines.add(cName[0]); 
     } 

     bufferedReader.close(); 

     return lines.toArray(new String[lines.size()]); 
    }  
} 
+0

讓我知道你對我的答案有什麼想法,我們應該找到一個解決方案。請致電 – user9349193413 2014-08-31 11:47:28

+0

[SSCCE](http://sscce.org)。 – djechlin 2014-08-31 12:59:22

回答

0

如果我的理解正確,你想要顯示一個單詞的所有字謎?

將您的方法readLines()更改爲返回ArrayList而不是數組。

ArrayList<String> readLines(String fname) { 

    File file = new File(fname); 
    ArrayList<String> list = null; 

    try { 
     Scanner scanner = new Scanner(file); 
     list = new ArrayList<String>(); 

     while (scanner.hasNext()) { 
      String currentWord = scanner.next(); 
      if (!currentWord.isEmpty()) { 
       list.add(currentWord); 
      } 
     } 
     scanner.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    return list; 
} 

使用此函數,輸入參數字典是從readLines返回的ArrayList。該功能使用的是,有兩個字謎像「狗」和「神」是相等的字符串時,都被排序(即「危險品條例」等於「危險品條例」)

public ArrayList<String> getAnagrams(String word, ArrayList<String> dictionary) { 
    if(word == null || dictionary == null) { 
     return null; 
    } 

    ArrayList<String> anagrams = new ArrayList<String>(); 
    char[] sortedChars = word.toCharArray(); 
    Arrays.sort(sortedChars); 
    for(String item : dictionary) { 
     char[] sortedDictionaryItem = item.toCharArray(); 
     Arrays.sort(sortedDictionaryItem); 
     if(Arrays.equals(sortedChars, sortedDictionaryItem)) { 
      anagrams.add(item); 
     } 
    } 
    return anagrams; 
} 

如果你不喜歡我的變化建議,你也可以做以下事情。在循環,你做的事:

if (line.matches(wordarray[0] + ".*")) { 
    System.out.println(line); 
} 

可以檢查兩個字符串彼此的排列:

if (isPermutation(line, wordarray[0]) { 
    System.out.println(line); 
} 

通過將以下兩個功能:

String sortString(String s) { 
    char[] chars = s.toCharArray(); 
    java.util.Arrays.sort(chars); 
    return new String(chars); 
} 

boolean isPermutation(String s1, String s2) { 
    if(s1.length() != s2.length()) { 
     return false; 
    } 
    s1 = sortString(s1); 
    s2 = sortString(s2); 
    return (s1.compareTo(s2) == 0); 
} 
0

這可能會幫助你適應你的代碼。

import java.util.regex.* ; 

public class Find_Dogs_And_Gods 
{ 
    public static void main(String []args) 
    { 
     String line = "2ldoghmDoggod" ; 

     Pattern p = Pattern.compile("[d,D,g,G][o,O][d,D,g,G]") ; 
     Matcher m = p.matcher(line) ; 

     while(m.find()) 
     { 
      System.out.println(m.group()) ; 
     } 
    } 
} 
+0

它也會返回Gog,Dod,GoG,Dod等! – 2014-08-31 12:19:19

+0

這是我的意圖,以任何組合查找這兩個詞。如果你看一下這個模式,找到大寫字母應該很容易實現。 – user9349193413 2014-08-31 12:28:05

1

我可以看到你可以從文件中讀取單詞。其餘的工作很簡單。算法是這樣的

  • 排序inputWord

  • 排序從文件

  • 讀單詞如果兩個詞是相同的打印或將其添加到列表中的一些。

這裏是上述算法的簡單演示,您可以根據需要進行修改。

public class App { 

     static String sortString (String str) { 
      char []chars = str.toCharArray(); 
      sort(chars); 
      return new String(chars); 
     } 
     public static void main(String... args) { 
      String inputWord = "DoG"; 
      String readWord = "God"; 
      inputWord = inputWord.toUpperCase(); 
      readWord = readWord.toUpperCase(); 
      inputWord = sortString(inputWord); 
      readWord = sortString(readWord); 

      if(inputWord.equalsIgnoreCase(readWord)) { 
       System.out.println(readWord);// you can add it to your list 
      } 

     } 
    } 
+1

我認爲你應該在調用sortString(String s)方法之前將inputWord和readWord轉換爲UPPER或LOWER大小寫。或者你可以提到sort(char [] c)函數會照顧它。 – BatScream 2014-08-31 12:27:09

相關問題