题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String line = ""; Pattern pa = Pattern.compile("^[ADWS]\\d{1,2}$"); int x = 0, y = 0; while ((line = bf.readLine()) != null) { String[] results = line.split(";"); for (String result : results) { Matcher matcher = pa.matcher(result); if (matcher.find()) { char[] chs = result.toCharArray(); char c = chs[0]; int val = 0; val = Integer.parseInt(result.substring(1)); switch (c) { case 'A': x -= val; break; case 'D': x += val; break; case 'W': y += val; break; case 'S': y -= val; break; } } } System.out.println(x + "," + y); } } }
- 注意:字符类型char对象转化为int类型对象,会将字符对象的ASCII值转换成int类型的值。比如字符'1'转化成为int类型的值,
int i = '1';//i的值为50,而不是1
- 注意正则表达式,如果想明确Pattern.compile的模式是适用于整个字符串(而不是其中包含的某个子字符串适用即可),前后加上^和$表示字符串开始和结束。
- 正则表达式中,转义符是反斜杠“\”(反斜杠可以这么记,它与x正方向的夹角大于90度,斜率为负数,所以称之为反斜杠)。
- 获取字符串中的子字符串第一时间想到API为string.substring()。(两个参数是左含右不含,1个参数是此下标到末尾(包含末尾字符))
- ASWD具体对应的规则要看清题意,不可以自己凭看题目时的记忆,具体代码时随便写。