0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# 头歌Educoder——Java 字符串与集合练习—词频统计 第2关:确定单词在字符串中的位置

任务描述

本关任务:得到一个单词在一段字符串中的位置。

相关知识

为了完成本关任务,你需要掌握:如何获取字符串中指定单词出现的下标

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;
    }

}
举报

相关推荐

0 条评论