嘿伙计们,我是Java的新手(好吧,花了一年时间的3/4)。
所以我对此知之甚少,我可以做基本的事情,但是没有向我解释先进的概念,还有很多东西要学!所以,请稍微向我介绍一下......
好的,所以我有这个项目,我需要从文件中读取文本行到数组,但只有那些符合特定条件的文本。现在,我读取数组中的行,然后跳过所有不符合条件的行。我为此使用for循环。这很好,但是当我打印出我的数组(必需)时,空值突然出现在我跳过单词的地方。
如何具体删除null元素?我试着到处寻找,但解释已经超出了我的想法!
以下是我必须专门处理数组的代码:(scanf是扫描仪,几行之前创建的):
//create string array and re-open file
scanf = new Scanner(new File ("3letterWords.txt"));//re-open file
String words [] = new String [countLines];//word array
String read = "";//to read file
int consonant=0;//count consonants
int vowel=0;//count vowels
//scan words into array
for (int i=0; i<countLines; i++)
{
read=scanf.nextLine();
if (read.length()!=0)//skip blank lines
{
//add vowels
if (read.charAt(0)=='a'||read.charAt(0)=='e'||read.charAt(0)=='i'||read.charAt(0)=='o'||read.charAt(0)=='u')
{
if (read.charAt(2)=='a'||read.charAt(2)=='e'||read.charAt(2)=='i'||read.charAt(2)=='o'||read.charAt(2)=='u')
{
words[i]=read;
vowel++;
}
}
//add consonants
if (read.charAt(0)!='a'&&read.charAt(0)!='e'&&read.charAt(0)!='i'&&read.charAt(0)!='o'&&read.charAt(0)!='u')
{
if (read.charAt(2)!='a'&&read.charAt(2)!='e'&&read.charAt(2)!='i'&&read.charAt(2)!='o'&&read.charAt(2)!='u')
{
words[i]=read;
consonant++;
}
}
}//end if
//break out of loop when reached EOF
if (scanf.hasNext()==false)
break;
}//end for
//print data
System.out.println("There are "+vowel+" vowel words\nThere are "+consonant+" consonant words\nList of words: ");
for (int i=0; i<words.length; i++)
System.out.println(words[i]);
非常感谢您收到的任何帮助!
答案 0 :(得分:3)
只为words
数组设置一个不同的计数器,只有在添加单词时才增加它:
int count = 0;
for (int i=0; i<countLines; i++) {
...
// in place of: words[i] = read;
words[count++] = read;
...
}
打印文字时,只需从0
循环到count
。
此外,这是一种检查元音/辅音的简单方法。而不是:
if (read.charAt(0)=='a'||read.charAt(0)=='e'||read.charAt(0)=='i'||read.charAt(0)=='o'||read.charAt(0)=='u')
你可以这样做:
if ("aeiou".indexOf(read.charAt(0)) > -1)
更新:说read.charAt(0)
是某个字符x
。上面的一行表示在字符串"aeiou"
中查找该字符。如果找到,则indexOf
返回字符的位置,否则返回-1。所以任何事情&gt; -1表示x
是"aeiou"
中的其中一个字符,换句话说,x
是元音。
答案 1 :(得分:2)
public static String[] removeElements(String[] allElements) {
String[] _localAllElements = new String[allElements.length];
for(int i = 0; i < allElements.length; i++)
if(allElements[i] != null)
_localAllElements[i] = allElements[i];
return _localAllElements;
}