【问题标题】:Removing words if the first letter is capital如果第一个字母是大写,则删除单词
【发布时间】:2014-01-26 07:14:37
【问题描述】:

我试图忽略首字母大写的单词并将其他单词添加到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();
    }


}

【问题讨论】:

    标签: java list arraylist io java-io


    【解决方案1】:

    你可以这样做

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        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】:

          您只检查第一个字母是否为capLetters[i],其中i 从0 开始。如果单词字符串以“A”以外的其他内容开头,它将转到else。你应该这样做:

          for(int i=0;i<capLetters.length;i++) {
             if(str.charAt(0) == capLetters[i]) {
                 capitalFound = true;  
             }
          }
          if(!capitalFound) {
             //add to list
          }
          

          当然不要忘记将capitalFound初始化为false,并在获取下一个单词之前再次将其设置为false

          【讨论】:

            【解决方案5】:
               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);
            

            【讨论】:

              【解决方案6】:

              虽然,你写的逻辑,当然是在别人建议的更正之后,还有其他对我来说似乎更干净的方法(希望你也一样)

              //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++;
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-12-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-07-29
                • 1970-01-01
                • 2018-07-09
                • 1970-01-01
                相关资源
                最近更新 更多