2016-12-20 7 views
5

文字列の区切り文字に対して文を分割して単語の頻度を数える方法はありますか?Javaで複数の区切り文字で分割する

String delimiters = "\t,;.?!-:@[](){}_*/"; 

私のテキストファイルは次のとおりです。

Billy_Reeves 

Smorz 

Nationalist_Left_-_Youth 

Ancient_Greek_units_of_measurement 

Jiuting_(Shanghai_Metro) 

Blodgett,_MO 

Baekjeong 

Matt_Brinkman 

National_Vietnam_Veterans_Art_Museum 

私は自分の解決策を見つける多分これは他の人のために参考になります:

BufferedReader br = null; 
      int index=0; 
      String sCurrentLine; 
       br = new BufferedReader(new FileReader(fileName));//file name with path 

       while ((sCurrentLine = br.readLine()) != null) 
       { 

        for(int i=0; i<sCurrentLine.length(); i++) 
        { 
         for(int j=0; j<delimiters.length(); j++) 
         { 
          if(sCurrentLine.charAt(i) == delimiters.charAt(j)) 
          { 
           int startIndex = 0; 
           int endIndex = i; 

           String subStr=sCurrentLine.substring(0, endIndex); 
           String subStr2=sCurrentLine.substring(endIndex+1,sCurrentLine.length()); 

           sCurrentLine = subStr.concat(subStr2); 
          } 
         } 
        } 

       } 
+2

何を試しましたか? – Thomas

+0

これは私のクラウドコンピューティングの宿題です。私は、各行のすべての区切り文字(区切り文字として区切られています)を分割することによって、指定されたtxtファイルの単語の頻度をカウントするReduceの例をマップしようとしています。 –

答えて

4

split("\\t|,|;|\\.|\\?|!|-|:|@|\\[|\\]|\\(|\\)|\\{|\\}|_|\\*|/"); 
で試してみてください

また

Use String.split() with multiple delimiters

+0

あなたは 'split'が正規表現を取ることを知っているようですが、正規表現の中のいくつかの文字は特別であり、エスケープする必要があるかも知れません。現在のフォームでは、正規表現が正しく作成されていないため、このコードはPatternSyntaxExceptionをスローします。 – Pshemo

+0

@Pshemoを修正しました – AMB

2

分割方法は、場合にのみ(OR正規表現演算子で区切られた正規表現あなたが入力する必要があり、複数の区切り文字を使用するので、引数として正規表現をとるか、文字クラスを使用して区切り文字は1文字です)。あなたは、彼らが正規表現のメタ文字ですと文字の一部をエスケープする必要があります見ることができるように

String delimiters = "[-\\t,;.?!:@\\[\\](){}_*/]"; 

:文字クラスを使用して

String delimiters = "\\t|,|;|\\.|\\?|!|-|:|@|\\[|\\]|\\(|\\)|\\{|\\}|_|\\*|/"; 

:OR演算子を使用して

関連する問題