2016-12-20 42 views
5

Jak mogę podzielić zdania w odniesieniu do ograniczników w ciągu i zliczyć częstotliwość słów?Split z wieloma ogranicznikami w Javie

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

Mój plik tekstowy jest:

Billy_Reeves 

Smorz 

Nationalist_Left_-_Youth 

Ancient_Greek_units_of_measurement 

Jiuting_(Shanghai_Metro) 

Blodgett,_MO 

Baekjeong 

Matt_Brinkman 

National_Vietnam_Veterans_Art_Museum 

znaleźć własne rozwiązanie może będzie to pomocne dla innych:

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

Czego próbowałeś? – Thomas

+0

To jest praca domowa w chmurze obliczeniowej. Próbuję Map Reduce przykład liczenia częstotliwości słów w danym pliku txt, wykonując podzielić wszystkie delimetry (które są podane jako ograniczniki String) w każdej linii. –

Odpowiedz

4

Spróbuj z

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

także

Use String.split() with multiple delimiters

+0

Wygląda na to, że 'split' przyjmuje wyrażenie regularne, ale zapomniał, że niektóre znaki w wyrażeniu regularnym są specjalne i mogą wymagać ucieczki. W obecnej formie ten kod wygeneruje wyjątek PatternSyntaxException, ponieważ nie został poprawnie utworzony. – Pshemo

+0

Naprawiono teraz @Pshemo – AMB

2

Sposób Podział bierze jako argument wyrażenie regularne tak, aby korzystać z wielu ograniczników, należy wprowadzić wyrażenie regularne oddzielone operator OR regex lub klasy znaku (tylko jeśli ograniczniki są pojedynczymi znakami).

Korzystanie operatora OR:

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

Korzystanie z klasy postaci:

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

Jak widać niektóre znaki muszą być ocalałem ponieważ są one regex metaznakami.