在Java中,我正在创建一个程序,要求用户想到他们认识的人。
然后,我的程序要求他们输入他们的名字的第一个字母,以及他们姓氏的最后一个字母,没有空格。
我希望我的程序然后查看一个全名的数组,找到第一个字母与用户输入的第一个字母匹配的那个,以及它们姓氏的相应最后一个字母。
到目前为止,这是我的程序:
import java.util.* ;
public class Guesser
{
public static void main(String[] args)
{
Scanner UserInput = new Scanner(System.in);
String [] names = {"firstname lastname " + "etc"}; //example name array
System.out.print( "Hello! I am a robot. I might be smart, but I don't know. Please play a game with me to help me see if I am smart." + "\n" + "What I want you to do is think of someone you know." + "\n" + "Enter the first letter of their first name, and the last letter of their last name. Please no spaces. Then, press enter. " );
String TheirGuess = UserInput.nextLine(); //get their input, assign a string to it
System.out.println("You entered: " + TheirGuess);
char FirstChar = TheirGuess.charAt(0); // get the the first char
char SecondChar = TheirGuess.charAt(1); // get the second char
System.out.println("I will now think of someone whose first name starts with " + FirstChar + " and last name ends with " + SecondChar );
UserInput.close();
}
}
我如何在我的字符串数组中搜索一个名字,其中FirstChar作为第一个字符,SecondChar作为最后一个字符?
答案 0 :(得分:2)
这可以在一行代码中完成。
// Assuming you have populated a Set (actually any Collection) of names
Set<String> names;
List<String> matchedNames = names.stream()
.filter(s -> s.matches(userInput.replaceAll("^.", "$0.*")))
.collect(Collectors.toList());
如果您只是想打印匹配项,那就更简单了:
names.stream()
.filter(s -> s.matches(userInput.replaceAll("^.", "$0.*")))
.forEach(System.out::println);
此代码识别您可以有多个匹配。
虽然这看起来像勺子喂食,但这个答案的价值在于弄清楚它是如何运作的。
答案 1 :(得分:1)
执行此操作的有效方法是使用两个TreeSet
个对象。一个包含名称,另一个包含姓氏。然后,您可以使用subSet()
方法获取条目。所以,例如:
TreeSet<String> names = new TreeSet<>();
names.add("Antonio");
names.add("Bernard");
names.add("Peter");
names.add("Zack");
Set<String> bNames = names.subSet("B", "C");
请注意,此实现区分大小写。但是只需要很少的调整就可以解决它 - 我将它留给你。
答案 2 :(得分:0)
暂时没有写Java
,但它应该是这样的:
String names[] = new String[] { "AAA BBB", "CCC DDD", "EEE FFF" };
Scanner input = new Scanner(System.in);
String userInput = input.nextLine().toLowerCase();
String result = "None";
for (String name : names) {
String[] nameSplitted = name.toLowerCase().split(" ");
if (nameSplitted[0].charAt(0) == userInput.charAt(0) &&
nameSplitted[1].charAt(0) == userInput.charAt(1)
) {
result = name;
break;
}
}
System.out.println("Result is: " + result);