java程序中经常通过split截取字符串来取得其中的关键字。但是由于其中不同操作系统或者不同作者的习惯,经常会出现不同数量的空格,例如"   "(3个空格);或者出现制表符、Tab符号"    "(Tab键)。因此合理的通过任意数量的空白字符切割获取关键字非常重要。下面是我一步步摸索找出解决方案的过程。结局很重要,整个的思维过程也是相当有意义的。

1. 问题的提出:

String sample = "a  b c    d";
String[] arrays = sample.split(" ");
for(String s : arrays)
{
System.out.println(s);
}

由于字符串中出现了不定个数的空格,所以截取的字符串数组中肯定会出现空格字符串,结果如下:

利用java正则表达式的贪婪原则,提出解决方法:

String sample = "a  b c    d";
String[] arrays = sample.split(" +");
for(String s : arrays)
{
System.out.println(s);
}

结果:

2.另一个问题的提出:

id userName sex
0 root male
1 user1 female

我要从上述文件读取每一行字符串并且split,但是由于格式化以及各人之间的习惯,每一行中间都充斥着空格和Tab键,因此第一种解决方案无法运用到这上面去。想到正则表达式中有“\s”代表任意空白字符,这里便可以解决问题:

String sample1 = "0  root       male";
String sample2 = "1 user1 female";
String[] arrays = sample1.split("\\s+");
for(String s : arrays)
{
System.out.println(s);
}
System.out.println("----------------------");
arrays = sample2.split("\\s+");
for(String s : arrays)
{
System.out.println(s);
}

结果:

3.字符串前后含有空白字符的情况:

String sample1 = "  0  root     male";
String[] arrays = sample1.split("\\s+");
for(String s : arrays)
{
System.out.println(s);
}

这时候打印结果会在前面多一个空的字符串,解决方法是在split之前先进行trim()操作,由于trim()支持级联调用,可以写成下面的方式:

String sample1 = "  0  root     male";
String[] arrays = sample1.trim().split("\\s+");
for(String s : arrays)
{
System.out.println(s);
}

结果Ok了。

java中split任意数量的空白字符的更多相关文章

  1. 关于java中split的使用

    之前在http://shukuiyan.iteye.com/blog/507915文中已经叙述过这个问题,但是最近一次笔试中居然有碰到了这个知识点,而且还做错了,囧!学艺不精啊.题目大概是这样的: ) ...

  2. java中split以"."分割的问题

    今天开发中使用字符串分割函数split(),发现:输出的并不是想要的结果 或者直接报错都有可能 查询后才发现,需要转译 原来在java中函数split(".")必须是是split( ...

  3. java中split(regex)使用中要注意的问题:正则表达式

    比如我在项目中遇到的(,),.,|,*等等类的符号: String area="(30.13206313822174, 120.4156494140625)(29.8763738070713 ...

  4. Java中split的对象被特殊字符(.或|)分隔

    在Java中,一个String对象被一些特殊字符分隔时,可以使用split()方法,生成一个String[],然后进行其他的操作,就像下面这样: String str = "a1_b1_c1 ...

  5. Java中split的用法

    Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项:java.lang.string.splitsplit 方法 ...

  6. java中split函数参数特殊字符的处理(转义),如:"." 、"\"、"|"

    内容介绍 本文主要介绍java中特殊字符做为split函数的参数,如:"." ."\"."|",双引号等,不能正确分隔源字符串的处理方法. ...

  7. Java中Split函数的用法技巧

    在java.lang包中也有String.split()方法,与.net的类似,都是返回是一个字符型数组,但使用过程中还有一些小技巧.如执行:"2|33|4".split(&quo ...

  8. 正则化—Java中Split函数的用法技巧_(转载修改)

    原文地址:http://www.cnblogs.com/liubiqu/archive/2008/08/14/1267867.html java.lang.string.split split 方法  ...

  9. 小细节:Java中split()中的特殊分隔符 小数点

    这两天做项目过程中由于数据表字段设计的太恶心了,导致自己填坑 关于微信支付和支付宝的支付有一个不同点:就是金额的处理,支付宝金额的单位是0.01元,但是微信支付中1表示0.01元,当时设计价格的时候使 ...

随机推荐

  1. js valueOf和toString方法

    JavaScript原生提供一个Object对象,所有其他对象都继承自这个对象,Object对象有valueOf和valueOf方法,所以所有JS数据类型都继承了这两种方法.   valueOf:返回 ...

  2. node express 登录拦截器 request接口请求

    1.拦截器 拦截器可以根据需要 做权限拦截 登录只是权限的一种, 思路是req.session.user判断用户session是否存在,是否是需要拦截的地址, 如果是就跳转登录页,或其他页, 如果非需 ...

  3. 2.0 python+appium环境搭建

    Python下载地址:链接:https://pan.baidu.com/s/1Z3H8tw8AiBVwpxdcABC7XQ 密码:z66t Pycharm下载地址: 链接:https://pan.ba ...

  4. [转]unity之LOD

    LOD技术有点类似于Mipmap技术,不同的是,LOD是对模型建立了一个模型金字塔,根据摄像机距离对象的远近,选择使用不同精度的模型. 它的好处是可以在适当的时候大量减少需要绘制的顶点数目. 它的缺点 ...

  5. NTP学习

    NTP(The Network Time Protocol),本以为是一个非常简单的协议,但是看了百度百科和ntp.org的介绍后,我发现我错了. 这个看似简单的协议存在一个很关键也是非常重要的问题- ...

  6. Qt(1)

    Qt Qt开发图形界面软件,可以跨win.linux.mac平台.移动端,使用c++开发 Qt采用所见即所得的UI设计(UI设计和代码是联动的),GUI界面编辑信号和槽,由开发环境自动生成c++代码, ...

  7. COMMIT和ROLLBACK的用法

    从功能上划分,SQL语言可以分为DDL,DML和DCL三大类. 1.DDL(Data Definition Language)  数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 : C ...

  8. linux备忘录-文件系统管理

    Extx 文件系统原理 block group 每个分区(partition)的组成为 boot sector -> block group -> block group -> bl ...

  9. linux kernal oom killer 学习

    背景 我有2个定时任务,一个任务A是00:00开跑,另一个B是04:00开跑.正常情况下A会在2点多时候跑完,但是某一天因为某一步骤用的时间过久,导致4点还没跑完,这时候A内存占用大约在12g左右.4 ...

  10. RabbitMQ-Java客户端API指南-上

    RabbitMQ-Java客户端API指南-上 客户端API严格按照AMQP 0-9-1协议规范进行建模,并提供了易于使用的附加抽象. RabbitMQ Java客户端使用com.rabbitmq.c ...