每次返回0的searchStudent方法有什么问题?int searchStudent(String target)通过名称查找并给出所需的索引。
import java.util.ArrayList;
班级学生{
String name;
double gpa;
public Student(String name, double gpa) {
this.name = name;
this.gpa = gpa;
}
public String getName() {
return name;
}
}
公共类StackOverflow {
static ArrayList<Student> stu = new ArrayList<>();
public static void main(String[] args) {
stu.add(new Student("Hadi", 2.3)); // <-- every time shows 'Hadi'
stu.add(new Student("Jack", 1.8));
stu.add(new Student("Sara", 4.6));
System.out.println("----- Searching For A Student -----");
int recurse = searchStudent("Jack");
if (recurse == -1) {
System.out.println("There is no Student with this name !!");
} else { //if 'Jack' was in List show his name
System.out.println(getStudent(recurse).getName());
}
}
public static int searchStudent(String target) {
int indexTarget = -1;
for (Student z : stu) {
if (z.getName() != null && z.getName().contains(target)) {
indexTarget = z.getName().indexOf(target);
}
}
return indexTarget;
}
public static Student getStudent(int index) {
return stu.get(index);
}
}
[方法String::indexOf
返回一个索引(从零开始的位置数字),指示找到所需目标字符串的第一个位置。
结果索引为零表示在检查的字符串的开头找到了您的目标。例如,您等效于在名称Bob
中查找Bobby
(或者在名称Bob
中查找)。
String name = "Bobby" ;
String target = "Bob" ;
int index_Bob = name.indexOf( target ) ;
System.out.println( "index_Bob: " + index_Bob ) ;
index_Bob:0
在by
中查找Bobby
,得到的结果为3(第4个字母的索引)。
int index_by = name.indexOf( "by" ) ;
System.out.println( "index_by: " + index_by ) ;
index_by:3
参见此code run live at IdeOne.com。
如果您尝试成功计数任何“包含”测试,并且您并不真正在意where匹配的目标,而只是匹配did,那么就不需要完全拨打indexOf
。
更改此:
count = z.getName().indexOf(target);
…对此:
count = ( count + 1 ) ; // Increment the count of matches.
顺便说一句,获取计数的高级方法是使用Stream(请参阅Tutorial)。请参阅下面的示例代码。
我没有您的Student
类,所以我在这里只使用String
。您可以将其更改为代码( Student student ) -> student.getName().contains( "Bob" )
。
List< String > names = List.of(
"Alice", "Bobby", "Bobette" , "Carol"
);
long countBobs =
names
.stream()
.filter(
( String name ) -> name.contains( "Bob" )
)
.count()
;
参见此code run live at IdeOne.com。
countbobs:2