Java输入与判断,Scanner和split的用法

今天做题被一个输入难住了。

arr = {1, 2 , 3},1979

意思是输入以上语句,1,2,3是一个int数组,1979是一个int变量。大概有两个方法来解决:

  1. hasNextInt():失败,好像是因为arr开头所以直接返回false
  2. input.nextLine()取整行,然后使用split
    最终还是没有成功,因为不知道怎么判断每个str本身的值是不是int类型的。在这里有点受Python脑的影响,总是想用type()函数来解决。
    后来多方查找,总结经验如下:
  3. input.nextLine()取整行,然后使用split,使用分隔符为=|,|\\{|\\}在这里我尝试使用\s但是不管用。原因不明。
  4. 经过步骤一,我们将返回值赋给一个String数组。
  5. 迭代数组中的每个元素,用一个简单的正则表达式\\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]*)$


  1. 0-9 ↩︎


版权声明:本文为leeafay原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。