详解 "\\s+"

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

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

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

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

举例——排序

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

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

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

样例输入

  1. 2 1 5 8 21 12

样例输出

  1. 1 2 5 8 12 21
    方法1
  1. import java.util.Scanner;
  2. public class test{
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. String s = sc.nextLine();//将用户输入的一整行字符串赋给s
  6. String[] c = s.split(" ");//用空格将其分割成字符串数组
  7.  
  8. int size = c.length;
  9. int[] b =new int[size];
  10. for (int m = 0; m < b.length; m++) {
  11. b[m] = Integer.parseInt(c[m]);//讲字符串数组转换成int数组
  12. }
  13. int temp=0;
  14. for (int i = 0; i < b.length; i++) {
  15. for (int j = 0; j < b.length-i-1; j++) {
  16. if(b[j]>b[j+1]){
  17. temp=b[j];
  18. b[j]=b[j+1];
  19. b[j+1]=temp;
  20. }
  21. }
  22. }
  23.  
  24. for(int n = 0; n < b.length ; n++){
  25. System.out.print(b[n]);
  26. System.out.print(' ');
  27. }
  28. sc.close();
  29. }
  30. }

方法2:

  1. import java.util.Scanner;
  2. public class test{
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. String s = sc.nextLine();//将用户输入的一整行字符串赋给s
  6. String[] c = s.split("\\s+");//用空格将其分割成字符串数组
  7.  
  8. int size = c.length;
  9. int[] b =new int[size];
  10. for (int m = 0; m < b.length; m++) {
  11. b[m] = Integer.parseInt(c[m]);//讲字符串数组转换成int数组
  12. }
  13. int temp=0;
  14. for (int i = 0; i < b.length; i++) {
  15. for (int j = 0; j < b.length-i-1; j++) {
  16. if(b[j]>b[j+1]){
  17. temp=b[j];
  18. b[j]=b[j+1];
  19. b[j+1]=temp;
  20. }
  21. }
  22. }
  23.  
  24. for(int n = 0; n < b.length ; n++){
  25. System.out.print(b[n]);
  26. System.out.print(' ');
  27. }
  28. sc.close();
  29. }
  30. }

这两个方法的区别就是

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

随机推荐

  1. Extjs下拉多选框

    //------录入时间,下拉列表框------ var inputTimeRow = new Ext.data.Record.create([ { name : 'value' },{ name : ...

  2. NSWindow添加NSViewController

    大概这样,笔记一下,防止忘记 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { MyViewControl ...

  3. 两个DataTable关联查询(inner join、left join)C#代码

    using System; using System.Collections.Generic; using System.Text; using System.Data; namespace Cons ...

  4. 【Oracle学习笔记-5--】集合操作之union,intersect和minus操作

    --union并操作 select e.employee_id,e.last_name from hr.employees e where e.last_name like 'C%' union se ...

  5. 2018-2019 20165226 Exp5 MSF基础应用

    2018-2019 20165226 Exp5 MSF基础应用 目录 一.实验内容说明及基础问题回答 二.实验过程 Task1 主动攻击实践 ms08_067 ms17_010 Task2 针对浏览器 ...

  6. 关于clearfix和clear的研究

    今天领导跟我说到这个问题,我上网找了些资料,已转载一篇文章到本博客(后一篇),摘自百度文库. ps:还有一种写法就是: CSS代码: .clearfix:after { content: " ...

  7. 计算图像相似度——《Python也可以》之一

    声明:本文最初发表于赖勇浩(恋花蝶)的博客http://blog.csdn.net/lanphaday 先将两张图片转化为直方图,图像的相似度计算就转化为直方图的距离计算了,本文依照如下公式进行直方图 ...

  8. h3c端口汇聚的几种情况-S5500-S5048

    S5500和S5048E聚合的几种情况,分享下:1.S5048E用手工的话,S5500用静态方式2.S5048E用静态的话,S5500用动态方式3.S5048E和S5048E聚合的话,用相同方式即可. ...

  9. CentOS命令行性能检测工具

    一.uptime Uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average).load average值分别记录了上个1分钟,5分钟和1 ...

  10. Oracle中分页查询和联表查询

    1.使用ROWNUM伪列查询 1.1.查询十条数据(rownum<=n) SELECT ROWNUM,A.* FROM v_sjjx_unit_info A WHERE ROWNUM<=1 ...