String.split()方法出问题啦!!

问题描述

最近碰到了一个问题,很奇怪,始终都没弄明白是怎么回事public class Test {public static void main(String[] args) {String str = "2,,3,4,3,,,,,";String[]flag = str.split(",");System.out.println(flag.length); //为什么是 5 ???}}为什么上面出现的结果会是5呢??它等于是忽略了后面的逗号,但是为什么前面的那个逗号却没忽略???

解决方案

jdk1.5 String的split方法注解This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.中文的该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,结果数组中不包括结尾空字符串。 // Construct result int resultSize = matchList.size(); if (limit == 0) while (resultSize > 0 && matchList.get(resultSize-1).equals("")) resultSize--; String[] result = new String[resultSize]; return matchList.subList(0, resultSize).toArray(result);split方法是调用Pattern的split实现的,看上面代码中的while (resultSize > 0 && matchList.get(resultSize-1).equals("")) resultSize--;可见。字符串末尾的空字符串将从匹配结果中去除不知楼上所云重点何在
解决方案二:
呵呵。。。。。。。感觉很多问题都可以通过查看源代码来解决哈!!又长见识了!!!
解决方案三:
bluespring (初级程序员)
解决方案四:
','的正则表达式还不就是','号。2楼正解。LZ的例子中,放在中间的那个分出的空字符串算一个数组元素,尾巴上那些就都不算了
解决方案五:
split(String regex, int limit)引用limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。split(String regex) 此时limit默认为0.即split(String regex,0)。
解决方案六:
public String[] split(String regex) { return split(regex, 0);}public String[] split(String regex, int limit) {return Pattern.compile(regex).split(this, limit);}上面是jdk的源代码中摘抄下来的。你的代码中:str.split(","); 的","号,会被JDK认为是一个正则表达式。

时间: 2024-10-04 23:51:19

String.split()方法出问题啦!!的相关文章

string-才发现JAVA木有String.Split 方法

问题描述 才发现JAVA木有String.Split 方法 额,在网上搜索程序逻辑的代码,发现这么一个方法,就很疑惑的发现在JAVA中没有找到替代品... String.Split (String[], StringSplitOptions) 主要说根据String[]所包含的规则串来拆解String,而不是根据单一给定的字符. 嗯,想在JAVA中试运行的话,这个方法怎么搞呢? 附我现在想做的事情:制作一个"规则翻译器",可以根据输入好的规则将任意一篇文字翻译为程序单元,然后通过解析这

javascript String split方法误操作_javascript技巧

split定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separator, howmany)参数 描述 separator 必需.字符串或正则表达式,从该参数指定的地方分割 stringObject. howmany 可选.该参数可指定返回的数组的最大长度.如果设置了该参数,返回的子串不会多于这个参数指定的数组.如果没有设置该参数,整个字符串都会被分割,不考虑它的长度. 返回值 一个字符串数组.该数组是通过在 separator

asp.net中String.Split 方法详细介绍

下边我们通过一些实例来说明下怎么使用(以下string words = "1,2.3,,4";):  Split(Char())  ?骰刈执??列,????列包含????绦???中,由指定的 Unicode 字元?列之元素所分隔的子字串.  代码如下 复制代码 1. public string[] Split(params char[] separator) string[] split = words.Split(new Char[] { ',' });//返回:{"1&q

c# 中string.split();方法怎么把字符分割一個一個字輸出來!!!!!

问题描述 String all = "極品五筆中國行"; String[] array = new String(all.length); array = str.Split('');這裡怎么寫呢 輸出這樣怎么寫啊: !!!!!!!!!!極品 五筆 中國行 解决方案 直接用ToCharArray就好了:String all = "極品五筆中國行"; char[] array = new char[all.Length]; array = all.ToCharArra

String的split()方法介绍

其实没打算写这么一篇博文的,但是昨天在逛论坛的时候,发现一帖子,然后我又把帖子的内容在群里发了一通,结果出现了让人惊讶的结果,所以这里简单的给大家分享一下split()方法,免得大伙儿以后还会出现这种基本知识错误! 接着说一下,昨天看到的帖子内容: String[] str1 = ";;;".split(";"); String[] str2 = ";a;;".split(";"); String[] str3 = "

Java中String.split()用法小结_java

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

split 方法

  将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator[, limit]]) 参数 stringObj 必选项.要被分解的 String 对象或文字.该对象不会被 split 方法修改. separator 可选项.字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符.如果忽略该选项,返回包含整个字符串的单一元素数组. limit 可选项.该值用来限制返回数组中的元素个数. 说明 split 方法的结果是一个字符串

flash as string.split()字符切割函数详细

split(String.split 方法) public split(delimiter:String, [limit:Number]) : Array 在指定的 delimiter 参数出现的所有位置断开 String 对象,将其拆分为子字符串,然后以数组形式返回子字符串.如果使用空字符串 ("") 作为分隔符,则该字符串中的每个字符都将作为一个元素放入到数组中. 如果未定义 delimiter 参数,则会将整个字符串放入返回的数组的第一个元素中. 可用性:ActionScript

Java Tips:使用Pattern.split替代String.split

String.split方法很常用,用于切割字符串,split传入的参数是正则表达式,它的内部是每次都comiple正则表达式,再调用Pattern.split方法: public String[] split(String regex, int limit) {     return Pattern.compile(regex).split(this, limit);     }   public String[] split(String regex) {         return sp