详解 "\\s+"

正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]

  • \f -> 匹配一个换页
  • \n -> 匹配一个换行符
  • \r -> 匹配一个回车符
  • \t -> 匹配一个制表符
  • \v -> 匹配一个垂直制表符

而“\s+”则表示匹配任意多个上面的字符。另因为反斜杠在Java里是转义字符,所以在Java里,我们要这么用“\\s+”.

那么问题来了,“\\s+”有啥使用场景呢?

举例——排序

假设一个输入场景:用冒泡排序算法对一组数字进行从小到大排序

输入:输入的是一行数字,就是我们需要排序的数字

输出:输出是从小到大排序好的数字,数字之间用空格分开

样例输入

2 1 5 8 21 12

样例输出

1 2 5 8 12 21
方法1:
import java.util.Scanner;
public class test{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();//将用户输入的一整行字符串赋给s
String[] c = s.split(" ");//用空格将其分割成字符串数组 int size = c.length;
int[] b =new int[size];
for (int m = 0; m < b.length; m++) {
b[m] = Integer.parseInt(c[m]);//讲字符串数组转换成int数组
}
int temp=0;
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b.length-i-1; j++) {
if(b[j]>b[j+1]){
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
} for(int n = 0; n < b.length ; n++){
System.out.print(b[n]);
System.out.print(' ');
}
sc.close();
}
}

方法2:

import java.util.Scanner;
public class test{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();//将用户输入的一整行字符串赋给s
String[] c = s.split("\\s+");//用空格将其分割成字符串数组 int size = c.length;
int[] b =new int[size];
for (int m = 0; m < b.length; m++) {
b[m] = Integer.parseInt(c[m]);//讲字符串数组转换成int数组
}
int temp=0;
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b.length-i-1; j++) {
if(b[j]>b[j+1]){
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
} for(int n = 0; n < b.length ; n++){
System.out.print(b[n]);
System.out.print(' ');
}
sc.close();
}
}

这两个方法的区别就是

用它:String[] c = s.split(" ");还是用它:String[] c = s.split("\\s+");
假如我们输入的是:1 2 3   12  11这样的数据,换言之就是数字之间有多个空格的时候,方法1将会报错,而方法2正常排序运行。因为方法1只能匹配一个空格,而方法2可以匹配多个空格。

随机推荐

  1. keepalived配置主从备份

    keepalived配置主从备份   keepalived是一个用于做双机热备(HA)的软件,常和haproxy联合起来做热备+负载均衡,达到高可用. 运行原理 keepalived通过选举(看服务器 ...

  2. python列表中的pop

    pop()将列表指定位置的元素移除,同时可以将移除的元素赋值给某个变量,不填写位置参数则默认删除最后一位. pop()根据键将字典中指定的键值对删除,同时可以将删除的值赋值给变量. a = [1, 2 ...

  3. PHP中header的用法总结

    来源 :http://blog.sina.com.cn/s/blog_7298f36f01011dxv.html header的用法 header()函数的作用是:发送一个原始 HTTP 标头[Htt ...

  4. bzoj1293 生日礼物

    Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩 ...

  5. shell打印彩色输出

    字体颜色(8种,3开头) 重置=0,黑色=30,红色=31,绿色=32, 黄色=33,蓝色=34, 洋红=35, 青色=36, 白色=37. 背景颜色(8种,4开头) 重置=0,黑色=40,红色=41 ...

  6. DOM节点的增删改查

    在开始展开DOM操作前,首先需要构建一棵DOM树. <!DOCTYPE html> <html lang="en"> <head> <me ...

  7. Spark交互式工具spark-shell

    REPL Spark REPL Spark shell 下面我们启动一下(我这里搭建的是3节点集群) sc.后面按TAB键可以把提示调出来 查看hdfs上文件内容 这个数据从这里下载的 https:/ ...

  8. 香侬科技独家对话Facebook人工智能研究院首席科学家Devi Parikh

    Facebook 人工智能研究院(FAIR)首席科学家 Devi Parikh 是 2017 年 IJCAI 计算机和思想奖获得者(IJCAI 两个最重要的奖项之一,被誉为国际人工智能领域的「菲尔兹奖 ...

  9. VC字符串转换常用函数

    最近在做一些关于VC的ActiveX小插件,经常会遇到字符串处理的问题,狂查CSDN和MSDN,结果并不理想.先说明一下,相关处理函数在VC++6.00测试通过.也许很多人不能理解,现在都什么年代了, ...

  10. WebLogic 任意文件上传 远程代码执行漏洞 (CVE-2018-2894)------->>>任意文件上传检测POC

    前言: Oracle官方发布了7月份的关键补丁更新CPU(Critical Patch Update),其中针对可造成远程代码执行的高危漏洞 CVE-2018-2894 进行修复: http://ww ...