0

さて、基本的にここでしなければならないことは、単語を含むファイルを読み取ることです。これらの単語の一部には、先頭と末尾に引用符、ピリオド、ハイフンなどの特殊文字が含まれています。ファイル内のすべての単語を数え、特殊文字の数を数え、それらを削除し、各単語を特殊文字なしで別の行に出力する必要があります。

これで目的がわかりましたので、以下のコーディングを使用して私の思考プロセスを説明したいと思います。最初は、switch ステートメントを使用して特定の文字を削除する方法を考えていました。switch ステートメントでは数字しか使用できないと思うので、ASCII テーブルの文字に 10 進数を使用するのが最善の方法だと思いました。行く。それで私はそれをしました、そしてそれはあるべき姿ですべての単語を出力します。ただし、すべての特殊文字を数え上げると、完全に間違ってしまい、合計数の一部しか数えられません。なぜこれが正確に行われているのか、私は途方に暮れているので、どんな助けでも大歓迎です!

import java.io.File;
import java.io.IOException;
import java.util.Scanner;   

public class FileWords
{
public static void main( String [] args ) throws IOException
{
    Scanner scan = new Scanner(System.in);
    System.out.print("Please enter a file name: ");
    File file = new File(scan.next() );

    Scanner scanFile = new Scanner(file);
    String fileContent;
    int wordNum = 0, quote = 0, dubQuote = 0, semi = 0, colon = 0, period = 0, comma = 0, hyphen = 0, exclamation = 0, dollar = 0,  question = 0, words = 0;

    do
    {
        fileContent = scanFile.next();  
        wordNum = fileContent.length();     

        switch ( (fileContent.charAt(0)) )
        {
            case 34: 
            dubQuote ++;
            fileContent = fileContent.substring( 1 , wordNum + fileContent.indexOf(" ") );
            break;

            case 36: 
            dollar++;
            fileContent = fileContent.substring( 1 , wordNum + fileContent.indexOf(" ") );
            break;

            case 39:
            quote++;
            fileContent = fileContent.substring( 1 , wordNum + fileContent.indexOf(" ") );
            break;

            case 46:    
            period++;
            fileContent = fileContent.substring( 1 , wordNum + fileContent.indexOf(" ") );  
            break;

            default:
            break;  
        }               

        wordNum = fileContent.length();

        switch ( fileContent.charAt(wordNum - 1) )
        {
            case 33: 
            exclamation++;
            words++;
            fileContent = fileContent.substring( 0 , wordNum + fileContent.indexOf(" ") );
            break;

            case 34: 
            dubQuote ++;
            words++;
            fileContent = fileContent.substring( 0 , wordNum + fileContent.indexOf(" ") );
            break;

            case 39: 
            quote++;
            words++;
            fileContent = fileContent.substring( 0 , wordNum + fileContent.indexOf(" ") );
            break;

            case 44: 
            comma++;
            words++;
            fileContent = fileContent.substring( 0 , wordNum + fileContent.indexOf(" ") );
            break;

            case 45: 
            hyphen++;
            words++;
            fileContent = fileContent.substring( 0 , wordNum + fileContent.indexOf(" ") );
            break;

            case 46: 
            period++;
            words++;
            fileContent = fileContent.substring( 0 , wordNum + fileContent.indexOf(" ") );
            break;

            case 58: 
            colon++;
            words++;
            fileContent = fileContent.substring( 0 , wordNum + fileContent.indexOf(" ") );
            break;

            case 59: 
            semi++;
            words++;
            fileContent = fileContent.substring( 0 , wordNum + fileContent.indexOf(" ") );
            break;

            case 63: 
            question++;
            words++;
            fileContent = fileContent.substring( 0 , wordNum + fileContent.indexOf(" ") );
            break;

            default:
            words++;
            break;
        }


        System.out.println(fileContent);

    } // end of do
    while (scanFile.hasNext());

    System.out.println();
    System.out.println("Double Quotes:       " + dubQuote);
    System.out.println("Single Quotes:       " + quote);
    System.out.println("Semi-Colons:         " + semi);
    System.out.println("Colons:              " + colon);
    System.out.println("Periods:             " + period);
    System.out.println("Commas:              " + comma);
    System.out.println("Hyphens:             " + hyphen);
    System.out.println("Exclamation Points:  " + exclamation);
    System.out.println("Question Marks:      " + question);
    System.out.println("Dollar Signs:        " + dollar);
    System.out.println("Words Found:         " + words);

}
}
4

3 に答える 3

0

これを行うためのより簡単な方法は、単純に配列を使用して各文字を調べ、 Character.isLetter() メソッドを使用することです。文字が文字の場合は文字列に追加し、そうでない場合はスペースまたは改行かどうかを確認します。スペースまたは改行の場合は文字列を出力し、それ以外の場合はその文字をスキップします。文字や 2 つの単語を区切るものではありません。これにより、現在見ているものだけでなく、考えられるすべての特殊文字もチェックされます。

于 2012-10-17T00:31:46.590 に答える
0

わかりましたので、私はそれを理解しました。問題は、最初の switch ステートメントで fileContent に間違った値を割り当てたことです。私がしなければならなかったのは + fileContent.indexOf(" ") を削除することだけで、私はゴールデンでした。

于 2012-10-17T01:31:52.560 に答える
0

手がかりを与えるために、次の表現:

fileContent.substring(1, wordNum + fileContent.indexOf(" "))

問題があるようです。次の内容のファイルがある場合に何が起こるかを考えてみてください。

「あ」

出力は次のとおりです。

Double Quotes:       1
Single Quotes:       0
Semi-Colons:         0
Colons:              0
Periods:             0
Commas:              0
Hyphens:             0
Exclamation Points:  0
Question Marks:      0
Dollar Signs:        0
Words Found:         1

したがって、引用符は誤ってカウントされます。論理エラーは次のように修正できます。

switch ((fileContent.charAt(0))) {                                            
case 34:                                                                      
    dubQuote++;                                                               
    fileContent = fileContent.substring(1, wordNum);                          
    break;                                                                    

case 36:                                                                      
    dollar++;                                                                 
    fileContent = fileContent.substring(1, wordNum);                          
    break;                                                                    

case 39:                                                                      
    quote++;                                                                  
    fileContent = fileContent.substring(1, wordNum);                          
    break;                                                                    

case 46:                                                                      
    period++;                                                                 
    fileContent = fileContent.substring(1, wordNum);                          
    break;                                                                    

default:                                                                      
    break;                                                                    
}                                                                             

wordNum = fileContent.length() - 1;                                           

switch (fileContent.charAt(wordNum)) {                                        
case 33:                                                                      
    exclamation++;                                                            
    words++;                                                                  
    fileContent = fileContent.substring(0, wordNum);                          
    break;                                                                    

case 34:                                                                      
    dubQuote++;                                                               
    words++;                                                                  
    fileContent = fileContent.substring(0, wordNum);                          
    break;                                                                    

case 39:                                                                      
    quote++;                                                                  
    words++;                                                                  
    fileContent = fileContent.substring(0, wordNum);                          
    break;                                                                    

case 44:                                                                      
    comma++;                                                                  
    words++;                                                                  
    fileContent = fileContent.substring(0, wordNum);                          
    break;                                                                    

case 45:                                                                      
    hyphen++;                                                                 
    words++;                                                                  
    fileContent = fileContent.substring(0, wordNum);                          
    break;                                                                    

case 46:                                                                      
    period++;                                                                 
    words++;                                                                  
    fileContent = fileContent.substring(0, wordNum);                          
    break;                                                                    

case 58:                                                                      
    colon++;                                                                  
    words++;                                                                  
    fileContent = fileContent.substring(0, wordNum);                          
    break;                                                                    

case 59:                                                                      
    semi++;                                                                   
    words++;                                                                  
    fileContent = fileContent.substring(0, wordNum);                          
    break;                                                                    

case 63:                                                                      
    question++;                                                               
    words++;                                                                  
    fileContent = fileContent.substring(0, wordNum);                          
    break;                                                                    

default:                                                                      
    words++;                                                                  
    break;                                                                    
}       
于 2012-10-17T01:26:59.113 に答える