我有这个数组列表:
[Staff 77778 Julie Chang Registrar, Adjunct 19778 Mike Thompson CS mtxxx@gmail.com GITC2400, Staff 30041 Anne Mathews Security, Junior 98444 Serene Murray Math smyyy@gmail.com]
对于数组列表中的每个字符串,第四个元素是姓氏。 我必须搜索整个数组列表(实际上是17个元素,但我将列表缩短为4个元素以便提出这个问题),每当我看到用户正在搜索的姓氏时,我必须返回整个包含该姓氏的字符串。 My Scanner对象将位于名为DirectoryServer.java的单独类中。
我创建了这个伪代码: 1)对于数组列表中的每个字符串,请查看第4个字 2)如果用户搜索=第4个单词,则该目录包含该人(忽略大小写) 3)返回包含姓氏的所有字符串
我尝试编写代码,但我对如何查看每个字符串的第四个单词感到困惑,如果它包含姓氏,我如何返回整个字符串,以及如何忽略大小写。
public boolean find(String LastName) {
boolean inDir = false;
for (int i = 0; i < dir.size; i++) {
String info= dir[i];
String[] splitInfo = info.split(" ");
if splitInfo.contains(LastName) {
inDir = true;
}
return inDir
}
}
答案 0 :(得分:1)
只需使用String[] words = info.split(" ")
拆分字符串(或者您可能希望将空格的正则表达式用于空格)。
然后执行words.length>4 && searchName.equalsIgnoreCase(words[3])
如果匹配则返回info
。
答案 1 :(得分:1)
让我们简化您的问题。您已经知道如何迭代ArrayList
。
让我们假设我们在字符串str
上进行迭代。您需要做的就是检查第四项工作是否为searchName
,如果是,您要返回整个字符串:
info.split("\\s+")
将根据1个或多个空格
检查是否存在第四个元素(非常重要)并将其与您想要的任何内容进行比较String#equalsIgnoreCase
如果是这样,请返回info
字符串或str
(我并不完全了解您要返回的内容)
请注意,\s
是匹配单个空格的正则表达式,\s+
匹配一个或多个空格,而在Java中,\
应该被转义,结果将是{{1 }}
答案 2 :(得分:1)
public boolean find(String LastName) {
boolean inDir = false;
for (int i = 0; i < dir.size; i++) {
String info = dir[i];
//Splits the string by space.
String[] splitInfo = info.split(" ");
//Checking if the string array has 4 elements in it.
if(splitInfo.size() >= 4){
//Taking fourth element and checking with lastname(case ignored)
if splitInfo[3].equalsIgnoreCase(LastName) {
//If equals returning the whole string.
return info;
}
// Else returning false
return inDir
}
}
答案 3 :(得分:1)
您可以从String API查看split()方法。 根据字符空间“”拆分列表中的每个字符串,并获取结果的第4个元素。 类似的东西:
String myString = "Staff 77778 Julie Chang Registrar";
String[] parts = myString.split(" ");
String lastName = parts[3]; // Chang
答案 4 :(得分:0)
编辑:快速解释。
public boolean find(String LastName, List<String> toSearch) {
boolean inDir = false;
for (String element : toSearch) {
String[] splitInfo = info.split(" ");
String thisLastName = splitInfo[3];
if (LastName.equalsIgnoreCase(thisLastName) {
return true;
}
}
return inDir
}
答案 5 :(得分:0)
我认为你的代码存在一些缺陷,试试这个:
public boolean find(String lastName) {
boolean inDir = false;
lastName = lastNamer.toLowerCase();
for (int i = 0; i < dir.size(); i++) { //Assuming dir is your arrayList
String info = dir.get(i);
String info = info.toLowerCase();
String[] splitInfo = info.split(" ");
if(splitInfo[3].equals(lastName)) //spliInfo[3] will always contain a last name
inDir = true;
return inDir
}
}