本题是需要将输入的字符串,得到移动位置的信息,同时要判断移动信息的合法性。
所以我们可以考虑先通过正则表达式过滤得到正确的字符串。
正确的字符串应该以ADWS其中一个字母开头,然后后面接着1个或者2个(0-9)的数字。所以我们的正则表达式应该是[AWSD][0-9]{1,2}。表示从AWSD中一个字母,然后1个或者2个0-9的数字。
然后我们就需要从键盘读取字符串,将字符串以分号拆分成字符串数组,然后进行匹配即可。
import java.util.*;
import java.io.*;public class Main {public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);String str = sc.nextLine();String[] in = str.split(";");int x = 0;int y = 0;for (String s : in) {// 不满足题目给定坐标规则if (!s.matches("[WASD][0-9]{1,2}")) {continue;}int val = Integer.valueOf(s.substring(1));//将字符串类型强转成int类型switch (s.charAt(0)) {case 'W':y += val;break;case 'S':y -= val;break;case 'A':x -= val;break;case 'D':x += val;break;}}System.out.println(x + "," + y);}
}
注意:
Java 中的正则表达式基础语法与其他编程语言中的正则表达式语法类似,但有一些特定的语法和约定。下面是 Java 中正则表达式的基础语法:
普通字符:大多数字符(字母、数字、标点符号等)在正则表达式中代表它们自身。例如,字符 “a” 在正则表达式中表示字符 “a”。
转义字符:反斜杠 “” 用于转义特殊字符,使其具有特殊的含义。例如,“.” 表示匹配实际的句点字符,而不是任意字符。
字符类:用方括号 “[]” 来定义一个字符类,表示可以匹配其中任意一个字符。例如,"[abc]" 表示匹配字符 “a”、“b” 或 “c” 中的任意一个。
字符范围:在字符类中使用连字符 “-” 来定义字符范围。例如**,“[a-z]” 表示匹配小写字母 “a” 到 “z” 中的任意一个字符。**
预定义字符类:Java 提供了一些预定义的字符类,可以简化常见模式的编写。例如,“\d” 表示匹配任意数字字符,“\w” 表示匹配任意单词字符。
量词:用于指定模式的重复次数。例如,“*” 表示零次或多次重复,“+” 表示一次或多次重复,“?” 表示零次或一次重复,“{n}” 表示恰好重复 n 次,“{n,}” 表示至少重复 n 次,“{n,m}” 表示重复次数介于 n 到 m 之间。
边界匹配符:用于匹配输入字符串的边界。“^” 表示匹配字符串的开头,“$” 表示匹配字符串的结尾。
分组和引用:用圆括号 “()” 来创建一个分组,在后续可以引用它。例如,“(ab)+” 表示匹配至少一个 “ab” 的序列。
逻辑运算符:用于组合多个模式。“|” 表示逻辑或,“()” 用于分组。例如,“(abc|def)” 表示匹配 “abc” 或 “def”。
特殊字符:Java 中的正则表达式也支持一些特殊的元字符和修饰符,如 “.” 表示匹配除换行符外的任意字符,“\s” 表示匹配任意空白字符等。
Integer.valueOf(String s) 返回一个 Integer 对象。
Integer.parseInt(String s) 返回一个 int 类型的原始整数值