2012-07-05 2 views
0

Java에서 여러 언어의 사전을 읽고 처리하려고합니다. 그렇다면 어떻게 코드를 정렬 할 수 있습니까? 감사.Java에서 여러 언어로 된 파일을 읽는 방법?

 String str_uc=str.toUpperCase(Locale.ENGLISH); 

그러나, 내가 읽은하려고 다른 언어에 대한 지원되지 않는 : 대문자를 켜려면

, 나는이를 사용했다.

그러나 중요한 문제는 대문자로 변환하기 전에 다른 언어의 파일을 제대로 읽을 수 없다는 것입니다.

여기까지 제가 한 것입니다. 영어 사전에 적합합니다.

import java.util.ArrayList; 
    import java.util.Locale; 
    import java.io.*; 
    public class XmlCreating { 


static ArrayList<Character> keywordletters = new ArrayList<Character>(); 
static ArrayList<Character> wordletters = new ArrayList<Character>(); 
static ArrayList<String> threeletter = new ArrayList<String>(); 
static ArrayList<String> fourletter = new ArrayList<String>(); 
static ArrayList<String> fiveletter = new ArrayList<String>(); 
static ArrayList<String> sixletter = new ArrayList<String>(); 
static ArrayList<String> sevenletter = new ArrayList<String>(); 
static ArrayList<String> words = new ArrayList<String>(); 
static ArrayList<String> allletters = new ArrayList<String>(); 

public static boolean hasApostrophe(String line){ 
    for(int i=0; i<line.length();i++) { 
     if(line.charAt(i)=='\'' || line.charAt(i)=='-') 
      return false;   
    } 
    return true;   
} 



public static void findLetters(String word, ArrayList<Character> ary) { 
    for(int i=0; i<word.length(); i++) { 
     ary.add(word.charAt(i));  
    } 
} 

public static boolean consistLetters(String keyword,String word) { 


    keywordletters.clear(); 
    wordletters.clear(); 
    findLetters(keyword,keywordletters); 
    findLetters(word,wordletters); 

    boolean found = false; 
    for(int i=0; i<wordletters.size(); i++) { 
     found=false; 
     for(int j=0; j<keywordletters.size(); j++) { 

      if(keywordletters.get(j)!='\''){ 
       if(wordletters.get(i)==keywordletters.get(j)) { 
        keywordletters.set(j,'\''); 
        found=true; 
        break; 
       }   
      } 
     } 

     if(found!=true) 
      return false; 
    } 

    return found; 
} 



public static void findWords(String keyword){ 

      words.clear(); 

      for(int i=0; i<threeletter.size(); i++) 
      { 
      if(consistLetters(keyword,threeletter.get(i))==true) 
       words.add(threeletter.get(i)); 

      } 
      for(int i=0; i<fourletter.size(); i++){ 
       if(consistLetters(keyword,fourletter.get(i))==true) 
        words.add(fourletter.get(i)); 
      } 

      for(int i=0; i<fiveletter.size(); i++){ 
       if(consistLetters(keyword,fiveletter.get(i))==true) 
        words.add(fiveletter.get(i)); 
      } 

      for(int i=0; i<sixletter.size(); i++){ 
       if(consistLetters(keyword,sixletter.get(i))==true) 
        words.add(sixletter.get(i)); 
      } 

      for(int i=0; i<sevenletter.size(); i++){ 
       if(consistLetters(keyword,sevenletter.get(i))==true) 
        words.add(sevenletter.get(i)); 
      } 

    } 


public static void main(String args[]) { 

    //Locale.setDefault(new Locale("tr","TR")); 
    try { 
     FileInputStream fstream1 = new FileInputStream("en-GB.dic"); 
     DataInputStream in = new DataInputStream(fstream1); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String str; 
     while ((str = br.readLine()) != null) { 
     String str_uc=str.toUpperCase(Locale.ENGLISH); 

      if(hasApostrophe(str_uc)){ 
       allletters.add(str_uc); 
      if(str.length()==3) 
       threeletter.add(str_uc); 
      else if(str.length()==4) 
       fourletter.add(str_uc); 
      else if(str.length()==5) 
       fiveletter.add(str_uc); 
      else if(str.length()==6) 
       sixletter.add(str_uc); 
      else if(str.length()==7) 
       sevenletter.add(str_uc); 
     } 
     } 
     in.close(); 

    } 
    catch (Exception e) { 
     System.err.println(e); 
    } 

    System.out.println(sevenletter.size()); 
    System.out.println(sixletter.size()); 
    System.out.println(fiveletter.size()); 
    System.out.println(allletters.size()); 


    int noOfXml=(int)(sevenletter.size()/10); 
    int lastXml=(int)(sevenletter.size()%10); 



    try{ 

     int a=0; 
     int b=10; 
     for(int x=1;x<noOfXml+1;x++) { 
     FileWriter fstream2 = new FileWriter(x+".xml"); 
     BufferedWriter out = new BufferedWriter(fstream2); 

     out.write("<?xml version='1.0' encoding='utf-8' ?><dictionary>"); 


     for(int i=a;i<b;i++) { 
       findWords(sevenletter.get(i)); 

       out.write("<ltr s='"+sevenletter.get(i)+"' w="); 

       for(int j=0; j<words.size();j++) { 

        out.write("'"+words.get(j)+"'"); 
        if(j<words.size()-1) 
         out.write(";"); 
       } 
       out.write("/>"); 
     } 
     a=b; 
     b=b+10; 


     out.write("</dictionary>"); 
     //Close the output stream 
     out.close(); 

     }}catch (Exception e){ 
     System.err.println("Error: " + e.getMessage()); 
     } 


    //for last five keywords 
    if(lastXml!=0) { 
     try{ 
       FileWriter fstream3 = new FileWriter((noOfXml+1)+".xml"); 
       BufferedWriter out1 = new BufferedWriter(fstream3); 

       out1.write("<?xml version='1.0' encoding='utf-8' ?><dictionary>"); 


       for(int i=sevenletter.size()-lastXml;i<sevenletter.size();i++) { 
        findWords(sevenletter.get(i)); 

        out1.write("<ltr s='"+sevenletter.get(i)+"' w="); 

        for(int j=0; j<words.size();j++) { 

         out1.write("'"+words.get(j)+"'"); 
         if(j<words.size()-1) 
          out1.write(";"); 
        } 
        out1.write("/>"); 
       } 
       out1.write("</dictionary>"); 
       //Close the output stream 
       out1.close(); 
     } 
     catch (Exception e){ 
     System.err.println("Error: " + e.getMessage()); 
      } 

     } 

    }//main 
    }//class 

답변

2

나는 UTF-8

나는 각 langage에 대한 가능성 Set<String>NavigableSet<String>에 각 사전을 읽을 것이며, 나는이 언어에 의해 키가 맵이다 배치 할 각 파일을 인코딩. 피터 Lawrey가 나오지으로,

<(String) codeLanguage, Set(String) allLanguageWorld>> 

당신이 동양 언어를 사용하는 경우이 같은지도에,

HashMap<(String) word ,Set<(String) codeLanguage>>

과 :

0

또 다른 방법은지도에서 키로 단어를 사용하는 것입니다 유니 코드를 사용해야합니다.

관련 문제