我正在尝试从字符串中提取元音并找到这些元音的数量。我声明的计数器工作正常,但数组长度始终相同。有人可以解释这种行为吗?
import java.util.ArrayList;
import java.util.List;
public class Vow {
static int count = 0;
String arr[] = new String[40];
public static char[] getV(char[] list) {
List<Character> a = new ArrayList<Character>();
char[] vow = new char[30];
char[] soluc = null;
int count = 0;
if (list==null) {
System.out.println("You are passing null value");
return null;
}
for (int i = 0; i < list.length - 1; i++) {
if (isV(list[i])) {
a.add(list[i]);
vow[i] = list[i];
count ++;
}
}
System.out.println("no of vowels is " + count);//this works
System.out.println("size is " + vow.length);
System.out.println("vowels are " + String.valueOf(vow));
System.out.println("size is " + vow.length);//but this does not why ?
System.out.println("ar is " + a);
return vow;
}
public static boolean isVowel(char c) {
String vowels = "aeiouAEIOU";
return vowels.indexOf(c) >= 0; //c exists in the String vowels
}
public static void main(String[] args) {
String s = "harestiou";
char[] a = s.toCharArray();
char[] b = getV(a);
System.out.println(b);
System.out.println(b.length);//it is not showing the length of vowels but instead the original size it was allocated
}
}
答案 0 :(得分:2)
我认为你的问题是你希望.length应该返回&#34;真实元素的数量&#34;一个数组。
这不是发生的事情:当你创建一个大小为30的数组时,比如
someArray =new char[30] ...
然后someArray.lenght总是返回30;无论有多少&#34;插槽&#34;在你实际填充的那个数组中。例如,您必须将数组转换为String,以便检索实际的字符数。
答案 1 :(得分:1)
System.out.println("size is"+vow.length);//but this does not why ?
那是因为char []vow=new char[30];
您创建了一个固定长度的数组,然后在if条件中,您只是更新该数组的元素,因此即使您没有更改该char数组的内容,{{1}也会保持长度相同将永远是30,因为这是你用它创建的大小。
如果你需要一个char [],那么你应该手动复制元素,因为现有的方法只处理Objects-&gt; Objects的复制,但是你需要原始的char []数组,所以在你返回之前改变这样的代码许愿
我认真建议将您的vow.length
变量名称更改为List<Character>
或更有意义的内容,而不仅仅是单个字母名称,例如charList
a
答案 2 :(得分:1)
限制大小为30的元音数组不是最佳解决方案。如果输入字符串的元音数超过30,那么它将失败。我对getV功能进行了一些改动。使用StringBuffer而不是重复使用变量和数组。虽然可以进一步优化!!!
public static char[] getV(char[] list) {
// No need of these extra arrays. so commenting and using single StringBuffer to hold vowels.
//List<Character> a=new ArrayList<Character>();
//char []vow=new char[30];
//char[] soluc=null;
StringBuffer sb = new StringBuffer();
int count=0;
if(list==null)
{
System.out.println("You are passing null value");
return null;
}
for(int i=0;i<list.length-1;i++)
{
if(isVowel(list[i])==true)
{
sb.append(list[i]);
count ++;
}
}
System.out.println("no of vowels is"+count+"");//this works
System.out.println("size is" + sb.toString().length());
System.out.println("vowels are "+sb.toString());
System.out.println("size is "+sb.toString().length());//but this does not why ?
System.out.println("ar is "+sb.toString());
return sb.toString().toCharArray();
}
希望这有帮助。 (虽然可以进一步优化逻辑!!!)