簡體   English   中英

如何使用嵌套的for循環計數文件或字符串對象中的單詞?

[英]How do I count words from a file or string object using a nested for loop?

這是一個項目,大部分已經完成,但是我需要能夠計算一個字符串或文件中的單詞數量。 我必須使用嵌套的for循環,並且必須使用包含單詞的定界符的String。 現在,這就是我所擁有的:

public static int wordCounter(String text)
{
    String WORDS_GROUP = ",\n ";
    String text= "This is my sample     text";
    int wordCount=0;
    for(int i=0; i<text.length(); i++){
        for(int j=0; j<WORDS_GROUP.length(); j++){
            if(text.charAt(i)==WORDS_GROUP.charAt(j)){
                wordCount++;
            }
        }
    }
}

如果您絕對需要使用嵌套的for循環,則可以讓第一個for循環遍歷文本中的所有行,第二個(嵌套)for循環遍歷每行的所有單詞,然后簡單地對它們進行計數。

你已經增加wordCount只有當最后一個字符不屬於WORDS_GROUP否則你最終有更多的話比你確實有。 例如,當您在sample后找到第一個空格時, wordCount為3,但隨后又出現另一個空格,您的算法將再次增加,這顯然是不正確的。

您可以引入一個新的boolean變量,如果找到第一個帶空格並執行第一個增量,則將其設置為true 當發現非空格時,將其設置為false僅當該變量設置為false時才會發生增量。

您可以維護一個表示您的“狀態”的布爾值。 您是在一個空格塊中(true),還是在一個非空格塊中(false)?

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

class Ideone {
    public static void main(String[] args) throws java.lang.Exception {
        String WORDS_GROUP = ",\n ";
        String text = "This is my sample     text";
        int wordCount = 0;
        boolean previousCharWasSpace = true;
        for (int i = 0; i < text.length(); i++) {
            boolean thisCharIsASpace = false;
            for (int j = 0; j < WORDS_GROUP.length(); j++) {
                if (text.charAt(i) == WORDS_GROUP.charAt(j)) {
                    previousCharWasSpace = true;
                    thisCharIsASpace = true;
                    break;
                }
                System.out.println("char=" + text.charAt(i) + " j=" + j
                        + " previousCharWasSpace=" + previousCharWasSpace);
            }
            if (!thisCharIsASpace && previousCharWasSpace) {
                wordCount++;
                previousCharWasSpace = false;
                System.out.println("char=" + text.charAt(i)
                        + " previousCharWasSpace=" + previousCharWasSpace
                        + " wordCount=" + wordCount);
            }
        }
        System.out.println("wordCount=" + wordCount);
    }
}

輸出:

char=T j=0 previousCharWasSpace=true
char=T j=1 previousCharWasSpace=true
char=T j=2 previousCharWasSpace=true
char=T previousCharWasSpace=false wordCount=1
char=h j=0 previousCharWasSpace=false
char=h j=1 previousCharWasSpace=false
char=h j=2 previousCharWasSpace=false
char=i j=0 previousCharWasSpace=false
char=i j=1 previousCharWasSpace=false
char=i j=2 previousCharWasSpace=false
char=s j=0 previousCharWasSpace=false
char=s j=1 previousCharWasSpace=false
char=s j=2 previousCharWasSpace=false
char=  j=0 previousCharWasSpace=false
char=  j=1 previousCharWasSpace=false
char=i j=0 previousCharWasSpace=true
char=i j=1 previousCharWasSpace=true
char=i j=2 previousCharWasSpace=true
char=i previousCharWasSpace=false wordCount=2
char=s j=0 previousCharWasSpace=false
char=s j=1 previousCharWasSpace=false
char=s j=2 previousCharWasSpace=false
char=  j=0 previousCharWasSpace=false
char=  j=1 previousCharWasSpace=false
char=m j=0 previousCharWasSpace=true
char=m j=1 previousCharWasSpace=true
char=m j=2 previousCharWasSpace=true
char=m previousCharWasSpace=false wordCount=3
char=y j=0 previousCharWasSpace=false
char=y j=1 previousCharWasSpace=false
char=y j=2 previousCharWasSpace=false
char=  j=0 previousCharWasSpace=false
char=  j=1 previousCharWasSpace=false
char=s j=0 previousCharWasSpace=true
char=s j=1 previousCharWasSpace=true
char=s j=2 previousCharWasSpace=true
char=s previousCharWasSpace=false wordCount=4
char=a j=0 previousCharWasSpace=false
char=a j=1 previousCharWasSpace=false
char=a j=2 previousCharWasSpace=false
char=m j=0 previousCharWasSpace=false
char=m j=1 previousCharWasSpace=false
char=m j=2 previousCharWasSpace=false
char=p j=0 previousCharWasSpace=false
char=p j=1 previousCharWasSpace=false
char=p j=2 previousCharWasSpace=false
char=l j=0 previousCharWasSpace=false
char=l j=1 previousCharWasSpace=false
char=l j=2 previousCharWasSpace=false
char=e j=0 previousCharWasSpace=false
char=e j=1 previousCharWasSpace=false
char=e j=2 previousCharWasSpace=false
char=  j=0 previousCharWasSpace=false
char=  j=1 previousCharWasSpace=false
char=  j=0 previousCharWasSpace=true
char=  j=1 previousCharWasSpace=true
char=  j=0 previousCharWasSpace=true
char=  j=1 previousCharWasSpace=true
char=  j=0 previousCharWasSpace=true
char=  j=1 previousCharWasSpace=true
char=  j=0 previousCharWasSpace=true
char=  j=1 previousCharWasSpace=true
char=t j=0 previousCharWasSpace=true
char=t j=1 previousCharWasSpace=true
char=t j=2 previousCharWasSpace=true
char=t previousCharWasSpace=false wordCount=5
char=e j=0 previousCharWasSpace=false
char=e j=1 previousCharWasSpace=false
char=e j=2 previousCharWasSpace=false
char=x j=0 previousCharWasSpace=false
char=x j=1 previousCharWasSpace=false
char=x j=2 previousCharWasSpace=false
char=t j=0 previousCharWasSpace=false
char=t j=1 previousCharWasSpace=false
char=t j=2 previousCharWasSpace=false
wordCount=5

您可以在這里玩: http : //ideone.com/ASEjwB

暫無
暫無

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

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