给出一个数组。如何找到列表中所有大于三个字符的单词并将其添加到新列表中
public class RunnerClass {
public static int counter;
public static int index=0;
public static void main(String[]args){
/*String mainArr[]= new String[5];
mainArr[0]="Taco";
mainArr[1]="Pizza";
mainArr[2]="Hi";
mainArr[3]="tryy";
mainArr[4]="live";*/
String[]myWords = {"Hi", "taco", "g"};
System.out.println(removeStopWord(myWords));
System.out.println(counter);
}
public static String[] removeStopWord(String [] arr){
counter=0;
//String [] methodArr = new String[counter];
//int index=0;
for(String keep : arr){
if(3<keep.length()){
counter++;
}
}
String [] methodArr = new String[counter];
index=0;
for (int i = 0; i < arr.length ; i++){
if (arr[i].length() > 3){
methodArr[index]=arr[i];
index++;
}
}
return methodArr;
}
}
答案 0 :(得分:1)
您可以使用java8流API过滤单词
struct stat
S_IRUSR
是一个API,用于创建数组的数据流,然后通过传递谓词来过滤流并将其收集在集合中,从而使用过滤器API。
答案 1 :(得分:0)
您似乎在正确的轨道上。
您可以使用String#length()方法整理一下,以检查长度是否小于3。
您还可以通过将匹配的字符串添加到ArrayList中来循环一次,该ArrayList会自动增长。您可以在返回之前将ArrayList转换回String []。
这将消除对计数器的需求。如果要打印单词数,只需在返回ArrayList或String []后再打印它的大小即可。
答案 2 :(得分:0)
您可以使用ArrayList
并流式处理API,
List<String> list=Arrays.asList("Hi", "taco", "g");
//filer the elements with length > 3 and then collect in a list
List<String> result=list.stream().filter(ele->(ele.length())>3).collect(Collectors.toList());
答案 3 :(得分:0)
1。您的代码实际上运行正常。
也许您认为您的代码不起作用的原因是因为行System.out.println(removeStopWord(myWords));
,该行可能会返回诸如[Ljava.lang.String;@15db9742
之类的内容。如SO post所述,这就是 className + @ +数组的hashCode的十六进制。
只需用System.out.println(Arrays.toString(removeStopWord(myWords)));
替换该行,并在必要时导入java.util.Arrays
。
2。 ArrayList的替代方案
现在,您要在数组上循环两次,以首先计算有效字数,然后创建大小为counter
的新数组。如果内存比速度更重要的是内存,那么这实际上是一件适当的事情(无论如何速度差异不大)。
如果您想要更优雅的东西,但由于动态内存分配而拥有更多的内存开销:
public static ArrayList<String> removeStopWord(String [] arr){
ArrayList<String> methodList = new ArrayList<String>();
for (int i = 0; i < arr.length ; i++){
if (arr[i].length() > 3){
methodList.add(arr[i]);
}
}
return methodList;
}
使用System.out.println(Arrays.toString(removeStopWord(mainArr).toArray()));