0

编写一个程序,读取一系列名字并通过将它们存储在一个集合中来消除重复。允许用户搜索名字。

(相信我,我没有上任何 Java 课程。所以,不是我的作业)。

我的问题是实现这一点:允许用户搜索名字。

其他一切正常,只是搜索功能。

到目前为止我的代码....

package com.Sets;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

public class DuplicateElimination {

    public static void main(String[] args) {

        // Write a program thats ask for first names and store it in an array.

        String fName;

        Scanner input = new Scanner(System.in);
        String[] names = new String[10];

        for (int i = 0; i < names.length; i++) {
            System.out.println("Enter First Name: ");
            names[i] = input.nextLine();
        }
        // Printout that array as a list.
        List<String> list = Arrays.asList(names);

        // Initial Array Elements
        System.out.printf("%s ", list);
        System.out.println();

        // Calling removeDuplicates method
        removeDuplicates(list);

    }

    // Make a method called removeDuplicates.
    private static void removeDuplicates(Collection<String> values) {

        // Implement a Hashset in it.
        Set<String> set = new HashSet<String>(values);

        // Printout a non-duplicate list of elements.
        for (String value : set) {
            System.out.printf("%s ", value);
        }

        System.out.println();

    }

    // Make a method to search for a first name.
    public static void searchForName(Collection<String> names) {

        String someName;

        Set<String> set = new HashSet<String>(names);
        Scanner input = new Scanner(System.in);


        for (int i = 0; i <= 10; i++) {
            System.out.println("Search this name: ");
            someName = input.nextLine();
        }

        if (someName ) {

        } else {

        }
    }

}

我对我的 searchForName 方法没有信心......有人可以给我一个关于如何使这项工作的想法吗?

4

4 回答 4

1

您可以使用 A TreeSet,然后使用tailSetheadSet 按字母顺序查找所有“大于或等于”和“小于或等于”搜索键的元素。

final TreeSet<String> p = new TreeSet<String>();

        p.addAll(Arrays.asList(new String[] { "aaaaaa", "bbbbbbb", "cccccc", "dddddd", "eeeeeee", "fffff" }));

        System.out.println(p.headSet("dd", true));
        System.out.println(p.tailSet("dd", true));

结果:

[aaaaaa, bbbbbbb, cccccc]
[dddddd, eeeeeee, fffff]

tailSet 的第一个元素是以搜索键(“dd”)开头的键。有一个问题 - 如果未找到姓氏“dddddd”,tailSet 将返回:

[eeeeeee, fffff]

所以你总是必须检查第一个元素是否为startsWith(“dd”)否则notFound!

于 2012-11-07T22:38:25.540 回答
1

考虑removeDuplicates返回Set. 传递SetsearchForName. 然后只需使用Set.contains.

Set.contains

于 2012-11-07T22:33:22.780 回答
1
public static boolean searchForName(Collection<String> names, String someName) 
{
    Set<String> set = new HashSet<String>(names);
    return set.contains(someName);
}
于 2012-11-07T22:33:49.847 回答
1

使用set.contains()方法检查一个集合是否包含输入字符串。

   for (int i = 0; i <= 10; i++) {
            System.out.println("Search this name: ");
            someName = input.nextLine();
        }

if(set.contains(someName)) {
System.out.println("set contains name");

}
else {
System.out.println("set doesnt contain this name");
}
于 2012-11-07T22:34:37.983 回答