话不多说,直接上代码,后面分析重要知识点
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String str = sc.next();
str = str.substring(2);
if(str.matches("[0-9a-fA-F]*") && str.length() < 9) {
Integer x = Integer.parseInt(str, 16);
System.out.println(x);
}else {
System.out.println("请输入正确的十六进制数");
}
}
}
}
注意:
1,如何控制十六进制的输入:用正则表达式str.matches("[0-9a-fA-F]*")
2,借用java已经封装好的方法转化十六进制:Integer.parseInt(str, 16)
3,如何减少代码运行时间运行时间:开始时,我先将字符串转为小写str.toLowerCase()
,然后正则表达式计算时用str.matches("[0-9a-f]*")
用时47ms。
后来我不转小写,直接用正则表达式进行判断str.matches("[0-9a-fA-F]*")
,用时42ms。由此说明正则的计算还是相当快的,所有以后一定要多使用正则。