2017-09-08 9 views
2

私はLinuxでコマンド "wc file name"の機能を実装しようとしました。ファイル内ファイルに複数のスペースがある場合、ファイル内の単語を数えるには? - Java

  • ライン
  • 言葉
  • バイト

: このコマンドは回数をカウントします。

Hex Description     Hex Description 

20 SPACE 
21 EXCLAMATION MARK   A1 INVERTED EXCLAMATION MARK 
22 QUOTATION MARK    A2 CENT SIGN 
23 NUMBER SIGN     A3 POUND SIGN 

が異なるlenghtsと複数のスペースがあります。

public class wc { 
    public static void main(String[] args) throws IOException { 
    //counters 
    int charsCount = 0; 
    int wordsCount = 0; 
    int linesCount = 0; 

    Scanner in = null; 

    try(Scanner scanner = new Scanner(new BufferedReader(new FileReader(new File("Sample.txt"))))){ 
     File file = new File("Sample.txt"); 

     while (scanner.hasNextLine()) { 

      String tmpStr = scanner.nextLine(); 
      if (!tmpStr.equalsIgnoreCase("")) { 
       String replaceAll = tmpStr.replaceAll("\\s+", ""); 
       charsCount += replaceAll.length(); 
       wordsCount += tmpStr.split(" ").length; 
      } 
      ++linesCount; 
     } 

    System.out.println("# of chars: " + charsCount); 
    System.out.println("# of words: " + wordsCount); 
    System.out.println("# of lines: " + linesCount); 
    System.out.println("# of bytes: " + file.length()); 

    } 
    } 
} 

問題は、ファイルにこのようなテキストがあるということです。

は、ここに私のコードです。ときどき倍以上になることもあります。どのように私のコードを正しく数えることができるようにリファクタリングするのですか?複数のスペースを取り除く方法は?あなたは、単に\\s+(複数whitspace)に分割することができるように

答えて

3

String#splitは、正規表現を受け付けます。

public static void main (String[] args) { 
    String input = "Some input with  more  than one space"; 
    String[] words = input.split("\\s+"); 
    System.out.println(words.length + " words"); 
} 

出力:

7 words 

on ideone.comを参照してください。

+0

Iは、空の文字列ですべての乗算スペースを置き換える、tmpStrを作成することによって、その方法を用いました。なぜ私はそれに気づかなかったのですか...? – JeyKey

0

splitはあまりにも正規表現をとるので、これは動作するはずです:

tmpStr.split("\\s+") 
0

@Marvinはすでにここに解決策を提案しています。

これは、複数のスペースを持つ文字列を分割する別の方法です。

s.split( "[] +")

はまた、あなたのために正常に動作する必要があります。

String s="This is  my test file."; 
String s1[]=s.split("[ ]+"); 
System.out.println(s1.length); 

出力: -

5 
関連する問題