2016-01-07 37 views
1

如果有些东西很简单,我很抱歉,我很抱歉。Java扫描程序找不到字

我有以下代码:

import java.util.Scanner; 
import java.io.File; 
import java.util.regex.Pattern; 
public class UnJumble 
{ 
    String[] ws; 
    int ind=0; 
    public static void main(String args[]) throws Exception 
    { 
     System.out.println("Enter a jumbled word"); 
     String w = new Scanner(System.in).next(); 

     UnJumble uj = new UnJumble(); 
     uj.ws = new String[uj.fact(w.length())]; 
     uj.makeWords("",w); 

     int c=1; 
     Scanner sc = new Scanner(new File("dict.txt")); 
     for(int i=0; i<uj.ws.length; i++) 
     { 
       Pattern pat = Pattern.compile(uj.ws[i].toUpperCase()); 
       if(sc.hasNext(pat)) 
        System.out.println(c+++" : \'"+uj.ws[i]+"\'"); 
     } 

     System.out.println("Search Completed."); 
     if(c==1) System.out.println("No word found."); 
    } 

    public void makeWords(String p,String s) 
    { 
     if(s.length()==0) 
       ws[ind++] = p; 
     else 
       for(int i=0; i<s.length(); i++) 
        makeWords(p+s.charAt(i),s.substring(0,i)+s.substring(i+1)); 
    } 

    public int fact(int n) 
    { 
     if(n==0) return 1; 
     else return n*fact(n-1); 
    } 
} 

dict.txt文件是SOWPODS字典,这是官方拼字字典..

我想在一个混乱的话,它要重新排列检查它是否存在于字典中。如果是,则打印出来。

当我尝试tra作为输入时,输出表示No word Found.。 但输出应该有tar,artrat这两个字。

请告诉我我犯了什么错误。如果我犯了一个非常简单的错误,我很抱歉,因为这是我第一次使用Pattern

回答

1

这是从Scanner.hasNext(Pattern pattern)的JavaDoc(我的高亮)

返回true如果下一个完整标记指定的模式相匹配。

当你的扫描仪与文件dict.txt初始化,它是在第一个字定位

而dict.txt中的第一个完整标记与您的任何scambled词不匹配,因此找不到匹配。

注:这里假设你有每行一个字

我想你可能要改变你的代码,以找到您的密文某处在字典文件(与开始时间的前行和结束行之后)导致的图案"(^|\\W)"+uj.ws[i].toUpperCase()+"(\\W|$)"和类似

String dictstring = your dictionary as one string; 

Matcher m = p.matcher(dictstring); 
if(m.find()) { 
    ... 

我建议IOUtils.toString()阅读您的文件是这样的:

String dictstring = ""; 
try(InputStream is = new FileInputStream("dict.txt")) { 
    dictstring = IOUtils.toString(is); 
} 

这里有一个小例子代码来熟悉和模式匹配:

String dictString= "ONE\r\nTWO\r\nTHREE"; 
    Pattern p = Pattern.compile("(^|\\W)TWO(\\W|$)"); 
    Matcher m = p.matcher(dictString); 
    if(m.find()) { 
     System.out.println("MATCH: " + m.group()); 
    } 
+0

我应该使用类似',而(sc.hasNext())dictstring + = sc.next()'把我整部字典作为一个字符串? – Hackerdarshi

+0

正如你不想在字里面匹配尝试“(^ | \\ W)”+ uj.ws [i] .toUpperCase()+“(\\ W | $)”正则表达式 – Jan

+0

是不是相同? – Hackerdarshi