簡體   English   中英

如何不計算文本文件中的控制字符

[英]How to NOT count control characters in a text file

我無法理解如何不計算文本文件中的控制字符。 我的程序除了跳過控制字符外都做了所有事情\\n \\r :文件內容:好的,經過進一步嘗試,我更接近。 如果我改變:

 while (input.hasNext()) { 
          String line = input.nextLine();
          lineCount++;
          wordCount += countWords(line);
          charcount += line.length(); 
 to
 while (input.hasNext()) {
          String line = input.next();
          lineCount++;
          wordCount += countWords(line);
          charCount += line.replace("\n", "").replace("\r", "").length();

字數被計算,但它弄亂了線條。 如果我添加input.nextLine,它就會混亂。 文本文件的內容:

傷心的狗
狗搖擺

import java.io.*;
import java.util.*;

public class Character_count {

 public static void main(String args[]) throws Exception {

     java.io.File file = new java.io.File("textFile.txt");

        // Create a Scanner for the file
        Scanner input = new Scanner(file);
        int charcount = 0;
        int wordCount = 0;
        int lineCount = 0;

        while (input.hasNext()) {
          String line = input.nextLine();
          lineCount++;
          wordCount += countWords(line);
          charcount += line.length();
        }


        System.out.println("The file " + file + " has ");
        System.out.println(charcount + " characters");
        System.out.println(wordCount + " words");
        System.out.println(lineCount + " lines");

        }

    private static int countWords(String s) {
        Scanner input = new Scanner(s);
            int count = 0;

        while (input.hasNext()) {
            input.next(); 
        count++;
        }
        return count;

  }
}

您可以使用useDelimiter方法使用您的Scanner實現此useDelimiter

Scanner input = new Scanner(new File("textFile.txt"));
input.useDelimiter("\r\n");

像往常一樣繼續你的代碼,應該工作。

另外(並且非常重要 )如果你檢查hasNext()然后使用next() ,如果你檢查hasNextLine()使用nextLine() 不要混淆,因為它會導致(或已經造成)問題。

你可以用空字符串替換所有\\n\\r \\n ,如下所示:

line = line.replaceAll("\\r?\\n", "")

現在你可以進行計數,它不會考慮任何\\n\\r \\n

你也可以這樣做(不使用正則表達式):

line = line.replace("\n", "").replace("\r", "")

您好,您應該在表示空格的正則表達式中使用'\\ s'

\\ s代表“空白字符”。 同樣,這實際包含哪些字符取決於正則表達式的味道。 在本教程中討論的所有風格中,它包括[\\ t \\ r \\ n \\ f]。 即:\\ s匹配空格,制表符,換行符或換頁符。( http://www.regular-expressions.info/shorthand.html

所以在這里你如何使用它

Scanner scanner = new Scanner(path.toFile(),"UTF-8");
    String content = scanner.useDelimiter("\\A").next();
    System.out.println(content);

    Pattern patternLine = Pattern.compile("\\r?\\n");
    Matcher matcherLine = patternLine.matcher(content);
    int numberLines = 1;
    while (matcherLine.find())
        numberLines++;


    Pattern pattern = Pattern.compile("\\s");
    Matcher matcherEliminateWhiteSpace = pattern.matcher(content);
    String contentWithoutWhiteSpace=matcherEliminateWhiteSpace.replaceAll("");


    // it will count only ASCII Charachter a->z A->Z 0->9 _'underscore'
    Pattern patternCharachter=Pattern.compile("\\w");
    Matcher matcherCharachterAscii= patternCharachter.matcher(contentWithoutWhiteSpace);


    int numberCharachtersAscii = 0;
    while (matcherCharachterAscii.find())
        numberCharachtersAscii++;
    //it will count UTF-8 charachters it will count all charachter no matter what script it is like français عربي and punctuation
Pattern patternUniversal= Pattern.compile(".");
    Matcher matcherUniversal= patternUniversal.matcher(contentWithoutWhiteSpace);
    int numberUniversalCharachter=0;
    while(matcherUniversal.find())
    numberUniversalCharachter++;
    System.out
            .println("******************************************************");
    System.out.println(contentWithoutWhiteSpace);
    System.out.println(numberLines);
    System.out.println(numberCharachtersAscii);
    System.out.println(numberUniversalCharachter);
  • 編輯

這是一個簡單的修改,將使其工作

        while (scanner.hasNext()) {
          String line = scanner.nextLine();
          lineCount++;
          wordCount += countWords(line);
          charcount += word.replaceAll("\\s", "").length();
          System.out.println(charcount);
          i++;
    }

\\\\ s代表白色空間[tab cariagReturn lineFeed space formFeed]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM