簡體   English   中英

按長度過濾數組元素

[英]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; 
}

變量(參數)名稱的錯誤選擇增加了您的困惑。 countByLengthlength參數是要查找的名稱的length ,而filterByLengthlength也是filterByLength 然而,你正在使用lengthfilterByLength作為名稱數組的長度-名稱的總數,換句話說。

如果您真的想使用一個簡單的數組(我建議在注釋中留意@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())Stream返回一個List

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM