今天做题被一个输入难住了。
arr = {1, 2 , 3},1979
意思是输入以上语句,1,2,3是一个int数组,1979是一个int变量。大概有两个方法来解决:
- hasNextInt():失败,好像是因为arr开头所以直接返回false
- input.nextLine()取整行,然后使用split
最终还是没有成功,因为不知道怎么判断每个str本身的值是不是int类型的。在这里有点受Python脑的影响,总是想用type()函数来解决。
后来多方查找,总结经验如下: - input.nextLine()取整行,然后使用split,使用分隔符为
=|,|\\{|\\}在这里我尝试使用\s但是不管用。原因不明。 - 经过步骤一,我们将返回值赋给一个String数组。
- 迭代数组中的每个元素,用一个简单的正则表达式
\\d{1,}匹配(该字符串.matches(正则表达式))一下即可。
总结代码如下:
/**
* Created by lixuefei on 9/5/18.
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
//arr = {1, 2 , 3},1979
public class test {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String[] str_arr = input.nextLine().split(",|=|\\{|\\}");
ArrayList<Integer> coin = new ArrayList<Integer>();
for(String i:str_arr){
if(i.trim().matches("\\d{1,}")){
coin.add(Integer.parseInt(i.trim()));
}
}
for(Integer test_i:coin){
System.out.println(test_i);
}
}
}
正则表达式真的太好用了。不过问题是总是写不对。在这里记录一些基本语法和基本语句:
#* + ?
“ab*”:表示一个字符串有一个a后面跟着零个或若干个b。“a”, “ab”, “abbb”,……
“ab+”:表示一个字符串有一个a后面跟着至少一个b或者更多;“ab”, “abbb”,……
“ab?”:表示一个字符串有一个a后面跟着零个或者一个b;“a”, "ab"
\s \S
\s 任何空白字符,包括空格、回车、制表符、换页符
\S 任何非空白字符。就是除了\s以外的都算
1 数字:1*$
2 n位的数字:^\d{n}$
3 至少n位的数字:^\d{n,}$
4 m-n位的数字:^\d{m,n}$
5 零和非零开头的数字:^(0|[1-9][0-9]*)$
0-9 ↩︎
版权声明:本文为leeafay原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。