如果第一个字母是大写,则删除单词

时间:2014-01-26 07:14:37

标签: java list arraylist io java-io

我试图忽略带有第一个字母大写的单词并将其他单词添加到List。但不幸的是,它确实没有删除任何内容,所有单词都被添加到List中。这有什么不对?

import java.io.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.List;

public class Main {

    private char[] capLetters = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    private StringBuffer strBuffer = new StringBuffer("");
    private List <String>  wordList= new ArrayList();

    public Main()
    {
        File f =new File("C:/xxx/COMMON.txt");
        try {
            BufferedReader br = new BufferedReader(new FileReader(f));
            String str = "";
            int number =0;

            while((str=br.readLine())!=null)
            {

                //Remove the words with first letter capital
                for(int i=0;i<capLetters.length;i++)
                {
                    if(str.charAt(0)==capLetters[i])
                    {

                    }
                    else
                    {
                        wordList.add(str);
                        break;
                    }
                }             


                number++;

            }

            System.out.println(number);

            for(int i=0;i<wordList.size();i++)
            {
                System.out.println(wordList.get(i));
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("Netbeans Version");  
        new Main();
    }


}

6 个答案:

答案 0 :(得分:1)

您只检查第一个字母是capLetters[i],其中i从0开始。如果单词字符串以“A”开头,则会转到{{ 1}}。你应该这样做:

else

当然不要忘记将for(int i=0;i<capLetters.length;i++) { if(str.charAt(0) == capLetters[i]) { capitalFound = true; } } if(!capitalFound) { //add to list } 初始化为capitalFound,并在获取下一个字之前再次将其设置为false

答案 1 :(得分:1)

您可以直接使用Character.isUpperCase(char)方法,而不是维护capLetters并将第一个字符与其中的每个字符进行比较。

对于当前方法,您只需将第一个字符与capLetters中的第一个字符进行比较,即可将字符串添加到列表中。您应该检查所有字符,然后将该字添加到循环外的列表中。使用boolean变量。

答案 2 :(得分:1)

你可以这样做

 while((str=br.readLine())!=null)
 {
     if(!Character.isUpperCase(str.charAt(0)))
     {
           wordList.add(str);
     }
     number++;
 }

答案 3 :(得分:1)

由于您的循环不正确,请尝试以下代码:

while((str=br.readLine())!=null)
        {


            boolean foundCap = false;
            //Remove the words with first letter capital
            for(int i=0;i<capLetters.length;i++)
            {
                if(str.charAt(0)==capLetters[i])
                {
                    foundCap = true;
                }

            }             
            if(!foundCap) {
                wordList.add(str);
            }

            number++;

        }

毕竟,您不需要编写循环来检查char是否为大写。只需使用实用方法: Character.isUpperCase(char c)

答案 4 :(得分:0)

   boolean b=false;
 for(int i=0;i<capLetters.length;i++)
                {
                    if(str.charAt(0)==capLetters[i])
                    {
                       b=true;
                    }

                }   
           if(!b){
                wordlist.add(str);
          }          

顺便说一句,你在循环遍历该字符数组时浪费时间和空间,你可以将字母与字符的ASCII代码进行比较。 你可以做到

if(str.charAt(0)>=65 && str.charAt(0)<=90)
//donothing
else
wordlist.add(str);

答案 5 :(得分:0)

虽然,你写的逻辑,当然在经过其他人提出修正后,还有另外一种方式对我来说似乎更清洁(希望对你来说也是如此)

//create a list from the caps array, to be used for comparision
List<char[]> caps = Arrays.asList(capLetters);

现在你应该是这样的:

while((str=br.readLine())!=null)
{
    //add word only if first letter is not capital
    if(!caps.contains(str.charAt(0))
       wordList.add(str);
    }
   number++;
}