在进行JAVA习题的时候,经常会遇到提取字符串中的数字的问题,怎么解决呢?这里提供几种方法:
几种方法由自己写的方法向JAVA自带的函数转向,代码的执行速度越来越快,执行效率越来越高。
其中第一个方法为自己写的,是从ASCII的角度判断的,类似的如果想判断字母也同理。
第二个方法中的isDigit方法需要JAVA的java.lang.Character.*包,如果用这种方法需要引包。
后两个方法的Pattern类需要JAVA的java.util.regex.Pattern包,也需引包。
这种Pattern正则表达式的方式判断的最快,其中最后一个是最快的。最后一个的compile中的[-\+]表示可能带±号,所以就显得更为强大了,当然,如果不需要可以不加这个,后面的[\d]表示数字,([\.d]表示浮点数)。所以看到这里,你有没有想记住这个很强的方法!
测试代码
import java.util.Scanner;
import java.util.regex.Pattern;
import static java.lang.Character.isDigit;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
String[] str1 = str.split(" ");
System.out.println("第一个方法:");
for (int i = 0; i < str1.length; i++){
if (isNumberic0(str1[i])){
System.out.print(str1[i] + "\t");
}
}
System.out.println("\n");
System.out.println("第二个方法:");
for (int i = 0; i < str1.length; i++){
if (isNumberic1(str1[i])){
System.out.print(str1[i] + "\t");
}
}
System.out.println("\n");
System.out.println("第三个方法:");
for (int i = 0; i < str1.length; i++){
if (isNumberic2(str1[i])){
System.out.print(str1[i] + "\t");
}
}
System.out.println("\n");
System.out.println("第四个方法:");
for (int i = 0; i < str1.length; i++){
if (isNumberic3(str1[i])){
System.out.print(str1[i] + "\t");
}
}
System.out.println("\n");
}
public static boolean isNumberic0(String str){
for (int i = 0; i < str.length(); i++){
if (str.charAt(i) > '9' || str.charAt(i) < '0'){
return false;
}
}
return true;
}
public static boolean isNumberic1(String str){
for (int i = str.length()-1; i >= 0; i--){
if(!isDigit(str.charAt(i))){
return false;
}
}
return true;
}
public static boolean isNumberic2(String str){
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
public static boolean isNumberic3(String str){
Pattern pattern = Pattern.compile("[-\\+]?[\\d]*$");
return pattern.matcher(str).matches();
}
}
由于我也是初学者,所以这里解释的可能会有纰漏,欢迎大神指出!
感谢师傅来访,技术不精,请勿吐槽,如有问题请留言。