Java:正则表达式+HashMap

坐标移动

http://www.nowcoder.com/questionTerminal/119bcca3befb405fbe58abe9c532eb29

Java题解:正则表达式+HashMap解决。正则表达式轻松过滤出合法输入,HashMap储存‘A'、’D'、‘S'、’W'各自值的和。

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Map<Character, Integer> map = new HashMap<Character, Integer>();
        while(scanner.hasNext()) {
            String s = scanner.nextLine();
            int x = 0 , y = 0;
            String[] sArray = s.split(";");
            String res = "[ADWS]\\d{1}\\d?";
            for(int i = 0;i < sArray.length;i ++) {
                if(sArray[i].matches(res))
                    map.put(sArray[i].charAt(0),map.getOrDefault(sArray[i].charAt(0), 0)+Integer.valueOf(sArray[i].substring(1)));
            }
            x = x - map.get('A') + map.get('D');
            y = y - map.get('S') + map.get('W');
            System.out.println(x+","+y);
            map.clear();
        }
        scanner.close();
    }
}
全部评论
为什么要加map.clear()呢?
4 回复 分享
发布于 2020-09-25 09:05
我自己写的代码自己跑没有问题,用这个就不通过,无语
1 回复 分享
发布于 2020-10-12 19:28
import java.util.HashMap; import java.util.Map; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); Map<character> map = new HashMap<character>(); while (in.hasNext()) { // 注意 while 处理多个 case String s = in.nextLine(); int a = 0 ,b = 0; String[] sFg = s.split(";"); String zzs = "[ADWS][0-9]+"; for (int i = 0 ; i < sFg.length; i++) { if (sFg[i].matches(zzs)) { map.put(sFg[i].charAt(0), map.getOrDefault(sFg[i].charAt(0), 0) + Integer.valueOf(sFg[i].substring(1))); } } a = a - map.getOrDefault('A', 0) + map.getOrDefault('D', 0); b = b - map.getOrDefault('S', 0) + map.getOrDefault('W', 0); System.out.println(a + "," + b); map.clear(); } in.close(); } }</character></character>
点赞 回复 分享
发布于 2023-05-09 10:28 辽宁
最后有两行要改成x = x - map.getOrDefault('A', 0) + map.getOrDefault('D', 0); y = y - map.getOrDefault('S', 0) + map.getOrDefault('W', 0); 这样的话,输入“A10;”的时候不会报错
点赞 回复 分享
发布于 2023-02-25 18:41 广东
不用Map吧,直接累加就行。
点赞 回复 分享
发布于 2023-01-08 22:01 浙江
用ADSW当key,如果字符串中有相同的,那不就失效了
点赞 回复 分享
发布于 2022-10-30 21:44 广东
Cannot invoke "java.lang.Integer.intValue()" because the return value of "java.util.HashMap.get(Object)" is null,这个错误。。。
点赞 回复 分享
发布于 2022-05-06 19:00
看错了 正则没有问题 是两位数字
点赞 回复 分享
发布于 2021-03-19 04:42
这个代码实际上是有问题的,会出现下标越界问题还有正则好像也有一点问题 Scanner in = new Scanner(System.in); Map<character> map = new HashMap<character>(); while (in.hasNext()) { String s = in.nextLine(); int x = 0 , y = 0; String[] sArray = s.split(";"); String res = "[ADWS][0-9]+"; for(int i = 0;i < sArray.length;i ++) { if(sArray[i].matches(res)) map.put(sArray[i].charAt(0),map.getOrDefault(sArray[i].charAt(0), 0)+Integer.valueOf(sArray[i].substring(1))); } x = x - map.getOrDefault('A', 0) + map.getOrDefault('D', 0); y = y - map.getOrDefault('S', 0) + map.getOrDefault('W', 0); System.out.println(x+","+y); map.clear(); }</character></character>
点赞 回复 分享
发布于 2021-03-19 04:29
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] arr = scanner.nextLine().split(";"); int x = 0; int y = 0; for (int i = 0; i < arr.length ; i++) { if (arr[i].length()==2 || arr[i].length()==3){ try { if (arr[i].startsWith("A")){ x-=Integer.valueOf(arr[i].substring(1)); }else if (arr[i].startsWith("D")){ x+=Integer.valueOf(arr[i].substring(1)); }else if (arr[i].startsWith("S")){ y-=Integer.valueOf(arr[i].substring(1)); }else if (arr[i].startsWith("W")){ y+=Integer.valueOf(arr[i].substring(1)); } } catch (NumberFormatException e) { continue; } } } System.out.println(x+","+y); } } 可以帮忙看下我这个为什么不通过啊,我自己测试用例是正确的啊
点赞 回复 分享
发布于 2020-05-21 18:56

相关推荐

水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
评论
76
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务