按长度过滤数组元素
Filter array elements by length
所以我希望能够要求用户输入数组的长度并用名称填充它。这样做之后,程序将打印出名称及其旁边的字符串长度。
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String names [];
// Read the number of kids
System.out.print("How many kids are there? ");
int size = sc.nextInt();
// Read the names of the kids
String [] kids = new String [size];
for (int k = 0; k < kids.length; k++)
{
System.out.print("Enter name of kid #" + k + ": ");
kids[k] = sc.next();
}
// Print all the names of the kids and the length of their names
System.out.println("Names of kids with lengths are: ");
for (int i = 0; i < kids.length; i++)
{
System.out.println(kids[i] + " " + kids[i].length());
}
在此之后,我希望用户输入一个整数,程序将在数组中搜索该长度的任何字符串,如果找到任何字符串,我希望它打印出它找到的所有字符串的首字母。我必须使用这个程序的方法。但我似乎无法解决这个问题。
static int countByLength(String [] names, int length)
{
int count = 0;
return count;
}
/**
* Filter an array of names and keep only those names with a given length
* @param names: an array of names
* @param length: an integer length
* @return the array of names that have the given length
*/
static String [] filterByLength(String [] names, int length)
{
String [] filtered = new String[length];
for(int k = 0; k < filtered.length; k++)
{
filtered [k] =
}
return filtered;
}
}
一个问题是,您不知道会得到多少结果,因此数组不是最好的数据结构。我建议改用列表,例如 ArrayList。然后您可以遍历数组,将所有匹配的字符串添加到列表中。
static List<String> filterByLength(String [] names, int length)
{
List<String> filtered = new ArrayList<String>();
for(int k = 0; k < filtered.length; k++)
{
if (names.length() == length) filtered.add(names[k]);
}
return filtered;
}
变量(参数)名称的错误选择增加了您的困惑。 countByLength
中的 length
参数是要查找的名称的长度,看起来 filterByLength
中的 length
也是如此。然而,您在 filterByLength
中使用 length
作为名称数组的长度——换句话说,名称的总数。
如果你真的想使用普通数组(我建议在评论中注意@Jack 的建议,或者编辑:@Leander 的回答)可能最简单的方法是首先计算匹配的名称数量,然后使用那么多元素创建并填充一个新的名称数组。看起来你想通过简单地获取过滤后的数组的大小来进行计数,这就是为什么这成为一个先有鸡还是先有蛋的问题。
我会用你创建的方法来回答这个问题,忽略它有效或无效的解决方案。
// Count the array that have name with same length
static int countByLength(String [] names, int length)
{
int count = 0;
for(int i = 0;i < names.length;i++)
{
if(names[i].length() = length) count++;
}
return count;
}
/**
* Filter an array of names and keep only those names with a given length
* @param names: an array of names
* @param length: an integer length
* @return the array of names that have the given length
*/
static String [] filterByLength(String [] names, int length)
{
String [] filtered = new String[countByLength(names, length)];
int index = 0;
for(int k = 0; k < filtered.length; k++)
{
if(names[k].length() == length) filtered[index++]=names[k];
}
return filtered;
}
如果您使用 Java 8 并使用列表而不是数组,您可以使用 filter
在一行代码中实现此目的:
List<String> filterByLength(List<String> names, int length) {
return names.stream().filter(n -> n.length() == length).collect(Collectors.toList());
}
names.stream()
将 List
变成 Stream
filter(n -> n.length() == length)
只保留流中长度等于 length
. 的元素
collect(Collectors.toList())
returns一个List
来自Stream
所以我希望能够要求用户输入数组的长度并用名称填充它。这样做之后,程序将打印出名称及其旁边的字符串长度。
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String names [];
// Read the number of kids
System.out.print("How many kids are there? ");
int size = sc.nextInt();
// Read the names of the kids
String [] kids = new String [size];
for (int k = 0; k < kids.length; k++)
{
System.out.print("Enter name of kid #" + k + ": ");
kids[k] = sc.next();
}
// Print all the names of the kids and the length of their names
System.out.println("Names of kids with lengths are: ");
for (int i = 0; i < kids.length; i++)
{
System.out.println(kids[i] + " " + kids[i].length());
}
在此之后,我希望用户输入一个整数,程序将在数组中搜索该长度的任何字符串,如果找到任何字符串,我希望它打印出它找到的所有字符串的首字母。我必须使用这个程序的方法。但我似乎无法解决这个问题。
static int countByLength(String [] names, int length)
{
int count = 0;
return count;
}
/**
* Filter an array of names and keep only those names with a given length
* @param names: an array of names
* @param length: an integer length
* @return the array of names that have the given length
*/
static String [] filterByLength(String [] names, int length)
{
String [] filtered = new String[length];
for(int k = 0; k < filtered.length; k++)
{
filtered [k] =
}
return filtered;
}
}
一个问题是,您不知道会得到多少结果,因此数组不是最好的数据结构。我建议改用列表,例如 ArrayList。然后您可以遍历数组,将所有匹配的字符串添加到列表中。
static List<String> filterByLength(String [] names, int length)
{
List<String> filtered = new ArrayList<String>();
for(int k = 0; k < filtered.length; k++)
{
if (names.length() == length) filtered.add(names[k]);
}
return filtered;
}
变量(参数)名称的错误选择增加了您的困惑。 countByLength
中的 length
参数是要查找的名称的长度,看起来 filterByLength
中的 length
也是如此。然而,您在 filterByLength
中使用 length
作为名称数组的长度——换句话说,名称的总数。
如果你真的想使用普通数组(我建议在评论中注意@Jack 的建议,或者编辑:@Leander 的回答)可能最简单的方法是首先计算匹配的名称数量,然后使用那么多元素创建并填充一个新的名称数组。看起来你想通过简单地获取过滤后的数组的大小来进行计数,这就是为什么这成为一个先有鸡还是先有蛋的问题。
我会用你创建的方法来回答这个问题,忽略它有效或无效的解决方案。
// Count the array that have name with same length
static int countByLength(String [] names, int length)
{
int count = 0;
for(int i = 0;i < names.length;i++)
{
if(names[i].length() = length) count++;
}
return count;
}
/**
* Filter an array of names and keep only those names with a given length
* @param names: an array of names
* @param length: an integer length
* @return the array of names that have the given length
*/
static String [] filterByLength(String [] names, int length)
{
String [] filtered = new String[countByLength(names, length)];
int index = 0;
for(int k = 0; k < filtered.length; k++)
{
if(names[k].length() == length) filtered[index++]=names[k];
}
return filtered;
}
如果您使用 Java 8 并使用列表而不是数组,您可以使用 filter
在一行代码中实现此目的:
List<String> filterByLength(List<String> names, int length) {
return names.stream().filter(n -> n.length() == length).collect(Collectors.toList());
}
names.stream()
将List
变成Stream
filter(n -> n.length() == length)
只保留流中长度等于length
. 的元素
collect(Collectors.toList())
returns一个List
来自Stream