任务描述
本关任务:得到一个单词在一段字符串中的位置。
相关知识
为了完成本关任务,你需要掌握:如何获取字符串中指定单词出现的下标
String.indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。(若返回-1则表示在该字符串中没有你要找的单词)
//声明一段字符串
String str="Can I help you";
//显示“I”在str中第一次出现的下标
System.out.println(str.indexOf("I"));
//String.indexOf(int ch)方法与此方法形同,只是参数是单个字符的ASCII码
输出:4
String.indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
String str="Can I help you";
System.out.println(str.indexOf("I",5));
//同样String.indexOf(int ch, int fromIndex)方法与此方法也形同,只是参数是单个字符的ASCII码
输出:-1
编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
- 列出给定字符串中每个单词(按
“ ”
,“,”
,“?”
,“.”
,“!”
,“:”
,“\n”
分割)首次出现的位置。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
测试输入:
No arguments will give courage to the coward.
预期输出:
单词:the---首次出现的角标34
单词:No---首次出现的角标0
单词:give---首次出现的角标18
单词:will---首次出现的角标13
单词:arguments---首次出现的角标3
单词:to---首次出现的角标31
单词:coward---首次出现的角标38
单词:courage---首次出现的角标23
提示:
//1.分割单词时可一次进行
//2.可以采用Map集合的键值对存储
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("Hello",0);
map.put("world",1);
Set<Entry<String, Integer>> entrySet = wordCount.entrySet();
for (Entry<String, Integer> entry : entrySet) {
System.out.println(entry.getKey()+"---"+entry.getValue());
}
输出:
Hello---0
world---1
开始你的任务吧,祝你成功!
代码示例
test.java
package step2;
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.Map.Entry;
public class test{
public static void main(String[] args){
StudentDemo demo=new StudentDemo();
Scanner sc=new Scanner(System.in);
String next=sc.nextLine();
Map<String, Integer> map = demo.getMap(next);
Set<Entry<String, Integer>> entrySet = map.entrySet();
for (Entry<String, Integer> entry : entrySet) {
System.out.println("单词:"+entry.getKey()+"---首次出现的角标"+entry.getValue());
}
}
}
StudentDemo.java
package step2;
import java.util.Map;
import java.util.HashMap;
import java.util.StringTokenizer;
public class StudentDemo {
// 返回一个Map集合来得到单词和首次出现的下标 key为单词名称 value为单词的角标
public Map<String, Integer> getMap(String str) {
Map<String, Integer> map = new HashMap<String, Integer>();
// 对str进行分割 再加入map集合中
// 请在此添加实现代码
/********** Begin **********/
StringTokenizer stn = new StringTokenizer(str, " ,?.!:\n");
while (stn.hasMoreTokens()) {
String str1 = stn.nextToken();
map.put(str1, str.indexOf(str1));
}
/********** End **********/
return map;
}
}