我试图忽略带有第一个字母大写的单词并将其他单词添加到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();
}
}
答案 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++;
}