任务描述
成为班长的小明最近好不忙,刚统计好了全班的花名册,班主任又交给了他一项任务。班主任的电脑不幸中了病毒,有一个文件变成了一堆乱码,但是班主任仔细查看了文件后发现,在这堆毫无意义的乱码中,还是有零散的班上同学的姓名穿插其中,现在班主任让小明将其位置找出来。
相关知识
substring()方法
在String类中有两个substring()方法,第一种如下:
String.substring(int start)
其中,start为要开始截取的位置的索引,方法将返回一个字符串,内容为原字符串从start位置开始到原字符串结束中间的数据。
例如:
String str = “hello world!”;
System.out.println(str.substring(1));
System.out.println(str.substring(3));
System.out.println(str.substring(6));
执行以上代码,结果如下:
ello world!
lo world!
world!
如果start大于字符串的长度,将会抛出越界异常。
第二种substring()方法:
String.substring(int start, int end)
其中,start为开始位置索引,end为结束为止索引,方法将返回一个字符串,内容为原字符串从start位置开始到end位置结束中间的数据。
例如:
String str = “hello world!”;
System.out.println(str.substring(1, 4));
System.out.println(str.substring(3, 5));
System.out.println(str.substring(0, 4));
执行以上代码,结果如下:
ell
lo
hell
indexOf()方法
indexOf()方法用于在String类的对象中查找子字符串,方法返回一个整数值,为子字符串的开始位置,若存在多个子字符串,返回数值最小的整数值;如果没有找到子字符串,返回-1。请看示例:
String str = “abcdefghijklmnabc”;
System.out.println(str1.indexOf(“c”)); //结果为2,为字符"c"第一次出现的位置
System.out.println(str1.indexOf(“x”)); //结果为-1,没有找到字符"x"
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
data变量为乱码文件的文本数据,由命令行读入;
name变量为需要查找的姓名,由命令行读入;
你将被要求输出若干行,每一行为查找到的姓名的位置。
评测说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是测试样例:
测试输入:
我嗨李四各位哦给李四复位后发我肥沃李四放我访问后李樊红伟四分嚄嚄嚄范围李四佛为红包蓝色配个好玩李四
李四预期输出:
2
8
17
35
47
专注于你的目标,做积极的人、相信就在你身边。不要让其他事情分心了你的目标,这些都无助于实现你的目标。
开始你的任务吧,祝你成功。
代码如下:
package step2;
import java.util.Scanner;
public class NameSearch {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/********** Begin *********/
String data=scanner.next();
String name=scanner.next();
int i=0;
do{
System.out.println(data.indexOf(name,i));
i=data.indexOf(name,i)+name.length();
//data.indexOf()返回的是出现该名字的开头字的位置
//name.length是指名字的长度
}while (data.indexOf(name,i)!=-1);
/********** End *********/
}
}