Java split函数拆分后变成null问题解决方案

对于一些特殊的情况,split拆分后并没有保留全的元素

如下例子:

String x ="a,,,,,,";
String []y = x.split(",");
for(int i=0;i<y.length;i++){
  System.out.println(y[i]);
}

输出结果:

只拆分得到了第一个字母,后面默认的空字符串并没有保留。

后来想到了使用StringUtils函数,查了一下,修改为如下:

String x ="a,,,,,,";
String y[] = StringUtils.splitPreserveAllTokens(x,",");
for(int i=0;i<y.length;i++){
  System.out.println(y[i]);
}

输出结果:

public static String[] splitPreserveAllTokens(String str, char separatorChar)

把字符串str拆分成一个数组,用字符(separatorChar)作为分隔符,并且保留所有的标识。

StringUtils函数还是很强大的,对于字符串的问题不会搞了看看这里还是不错的

如果当年搞ACM的时候,知道这个东西,很多问题都解决了 T_T

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-10-12

Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例

一:工具栏(JToolBar) 代码示例: 复制代码 代码如下: import javax.swing.*; //工具栏的使用案例 public class JToolBarDemo2_jigloo extends javax.swing.JFrame { private JToolBar myJToolBar;  private JButton jB_file;  private JButton jB_edit;  private JButton jB_tools;  private JBut

java 中用split分割字符串,最后的空格等不被拆分的方法

在使用java中的split按照"\t",拆分字符串的时候,发现如果最后的几个字段是空,只是用\t分割,是连着的\t的话,就不会被分割,如 "d\tc\te\t\t\t"最后的几个\t就不会被分割,应该是在拆分之前对字符串进行了处理. 导致的拆分字段个数错误.查了一下APi,需要在split中添加参数-1,String[] values = line.split("\t",-1); imit 参数控制应用模式的次数,从而影响结果数组的长度 如果限

Java正则表达式之split()方法实例详解

本文实例讲述了Java正则表达式之split()方法.分享给大家供大家参考,具体如下: 1.方法介绍 (1)public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串 (2)public String[] split(String regex,int limit) 根据匹配给定的正则表达式来拆分此字符串 2.方法实例 /** * @Title:Split.java * @Package:com.you.data * @Description:Ja

java用split分割字符串的一个有趣现象

下面有段代码: String str="1#2#3"; String[] strs=str.split("#"); System.out.println(strs.length); ok,上面这段代码最终输出结果是2,这没有问题,但是如果换成下面的写法呢,请看: String str="##"; String[] strs=str.split("#"); System.out.println(strs.length); 结果输

Java的split方法使用详解

相信大家都经常使用String 的split方法,但是大家有没有遇到下面的这种情况: 大家想想下面的代码执行结果是什么 public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[]

java split用法详解及实例代码

public String[] split(String regex) 默认limit为0 public String[] split(String regex, int limit) 当limit>0时,则应用n-1次 public static void main(String[] args) { String s = "boo:and:foo"; String[] str = s.split(":",2); System.out.print(str[0]

Java中String.split()用法小结

在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅供大家参考: 1.如果用"."作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 2.如果用"|"作为分隔的话,必须是如下写法,String.split("\\|"),这样才能正确的分隔开,不能用String.s

浅谈java String.split丢失结尾空字符串的问题

java中的split函数用于将字符串分割为字符数组是很方便的,但由于不是很熟悉,犯了错误 如下: String strtest = "1,2,"; String arry[] = strtest.split(","); 这样得到的数组元素个数只是2两个,为什么呢,最后一个","后没有内容,它没有作为空字符串成为第三个数组元素,结尾的空字符串被丢弃了! 这个函数还有另一种重载方式 :public String [] split (String 

浅谈java String不可变的好处

一.java内部String类的实现: java 8: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; } java 9 及之后:(使用coder标识了编码) public final class Stri

浅谈java异常链与异常丢失

1.在java的构造方法中提供了 异常链.. 也就是我们可以通过构造方法不断的将 异常串联成一个异常链... 之所以需要异常连,是因为处于代码的可理解性,以及阅读和程序的可维护性... 我们知道我们每抛出一个异常都需要进行try catch ...那么岂不是代码很臃肿... 我们如果可以将异常串联成一个异常连,然后我们只捕获我们的包装 异常,我们知道 RuntimeException 以及其派生类可以不进行try catch 而被jvm自动捕获并处理.. 当然了我们可以自己定义自己的异常类从Ru

浅谈java对象转json,数字精确出现丢失问题

现象 java中的大数字比如18/19位的整数(long),转为json,输出到页面后,就出现精度丢失,如果数字再大些就会出现科学计数法. 这两个问题都不是json工具包(比如Gson)的问题,而是由于js存储大数字丢失精度引起. 1.精度丢失例子:当js表达整数时,最多表达15位数字,如果超过15位就会出现精度丢失问题. 援引js文档: 精度 整数(不使用小数点或指数计数法)最多为 15 位. 最后几位都变为0,丢失精度 var x = 1234567890123456999; console

浅谈Java的String中的subString()方法

方法如下: public String substring(int beginIndex, int endIndex) 第一个int为开始的索引,对应String数字中的开始位置, 第二个是截止的索引位置,对应String中的结束位置 1.取得的字符串长度为:endIndex - beginIndex; 2.从beginIndex开始取,到endIndex结束,从0开始数,其中不包括endIndex位置的字符 如: "hamburger".substring(4, 8) returns

浅谈java中String StringBuffer StringBuilder的区别

* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用时,如果经常需要对一个字符串进行修改,例如插入.删除等 * 但StringBuffer和StringBuilder有什么区别呢? StringBuffer是线程安全的,在多线程程序中是很方便使用的,但是程序的效率就会慢一点. StringBuilder不是线程安全的,在单线程中,比StringBuf

浅谈Java编程中string的理解与运用

一,"=="与equals() 运行以下代码,如何解释其输出结果? public class StringPool { public static void main(String args[]) { String s0="Hello"; String s1="Hello"; String s2="He"+"llo"; System.out.println(s0==s1);//true System.out

浅谈java中String的两种赋值方式的区别

类似普通对象,通过new创建字符串对象.String str = new String("Hello"); 内存图如下图所示,系统会先创建一个匿名对象"Hello"存入堆内存(我们暂且叫它A),然后new关键字会在堆内存中又开辟一块新的空间,然后把"Hello"存进去,并且把地址返回给栈内存中的str, 此时A对象成为了一个垃圾对象,因为它没有被任何栈中的变量指向,会被GC自动回收. 直接赋值.如String str = "Hello&

浅谈java常用的几种线程池比较

1. 为什么使用线程池 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP.FTP 或 POP).通过 JMS 队列或者可能通过轮询数据库.不管请求如何到达,服务器应用程序中经常出现的情况是:单个任务处理的时间很短而请求的数目却是巨大的. 构建服务器应用程序的一个简单模型是:每当一个请求到达就创建一个新线程,然后在新线程中为请求服务.实际上对于原型开发这

浅谈java中字符串数组、字符串、整形之间的转换

字符串数组转字符串(只能通过for循环): String[] str = {"abc", "bcd", "def"}; StringBuffer sB = new StringBuffer(); for (int i = 0; i < str.length;i++) { sB.append(str[i]); } String s = sB.toString(); 字符数组转字符串可以通过下面的方式: char[] data = {"