`
jjhpeopl
  • 浏览: 110219 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

字符串切分,String和StringUtils的区别

    博客分类:
  • java
阅读更多
String的split方法可以按照正则表达式把string数据拆分成数组
如下:
String test1 = "1,2,3";
System.out.println(test1.split(",").length);
结果为3
若test1=“1,2,3,”,结果为3
若test1=“,1,2,3”,结果为4,第一个元素就是空
// Add segments before each match found
    while(m.find()) {
        if (!matchLimited || matchList.size() < limit - 1) {
            String match = input.subSequence(index, m.start()).toString();
            matchList.add(match);
            index = m.end();
        } else if (matchList.size() == limit - 1) { // last one
            String match = input.subSequence(index,
                                             input.length()).toString();
            matchList.add(match);
            index = m.end();
        }
    }

    // If no match was found, return this
    if (index == 0)
        return new String[] {input.toString()};

    // Add remaining segment
    if (!matchLimited || matchList.size() < limit)
        matchList.add(input.subSequence(index, input.length()).toString());

  
 
从代码中可以发现,根据逗号拆分之后,其实会把逗号之前当成一个空字符串放到matchList中。当字符串处理完之后,matchList中就存了所有的悲切分后的元素。但在方法最后还会对matchList进行验证,即从最后一个元素开始,判断是否为空,若为空就去掉,不为空就不继续往前验证了。
// 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)
这也就造成了“1,2,3,”和“,1,2,3”拆分结果的不同。
也是这个原因,造成“,”拆分时,会没有任何数据产生,若是有类似代码使用,必须还得校验拆分出来的数据是否可用,否则容易造成异常
如:传递商家id,可能传递多个,利用逗号分隔,结果只传递了逗号,判断有逗号存在,解析出来却没任何数据,直接报错,如下代码就是有问题的
String test1 = “,";
System.out.println(test1.split(",)[0]);
对于这个问题,可以不直接判断是否有逗号存在,而是直接调用split方法,然后再校验拆分出来的数组有没有数据即可
在apache的commons-lang3包中提供了StringUtils的类,此类中也有split方法,而且对于“,1,2,3”这种情况拆分出来的结果是不一样的。
在StringUtils类中的split方法,会根据逗号进行拆分,在这个里面也是利用到了list存储拆分结果。但是在拆分开始时,若第一个元素就是逗号,是不会放到list中的,即最后结果中第一个元素不是空,也就跟String的split不一样了。
但是StringUtils还提供了另外一个方法splitPreserveAllTokens,这个方法就会保留逗号前后的数据,不管逗号前后是否真的有数据,若是没数据就以空字符串补齐。
 
另外这只是一个字符作为切割串,若是有多个字符作为切割串,那结果就又不一样了。
如字符串“1332”,以“12”作为切割串进行切割。
在利用String的split方法时,会返回原字符串,没有进行切割,是以12作为整体进行match。
而StringUtils的方法,并不是以“12”作为整体,而是查看字符串是否存在“1”或“2”这些字符,切割的意义就跟String有天壤之别了,使用时要注意。
 
可以看看guava里面的拆分,跟String的差不多。另外这个包中对字符串的其他操作也不错,例如:
// 把字符串解析成map
String str = "a=1;b=2";
Map<String, String> resultMap = Splitter.onPattern(";").withKeyValueSeparator("=").split(str);
System.out.println(resultMap.toString());

// 把map转成字符串
String resultStr = Joiner.on(";").withKeyValueSeparator("=").join(resultMap);
System.out.println(resultStr); 
1
0
分享到:
评论
2 楼 jjhpeopl 2016-09-13  
somefuture 写道
另外String.split方法可以指定第二个参数来保留最后的空元素


多谢补充
1 楼 somefuture 2016-09-13  
另外String.split方法可以指定第二个参数来保留最后的空元素

相关推荐

    StringUtils 字符串常用工具

    以上只是 `StringUtils` 类的一部分功能,实际上它还提供了更多实用的方法,如删除特殊字符、转义和反转字符串等。使用 `StringUtils` 可以让我们的代码更加简洁、易读,同时避免了许多处理字符串时可能出现的潜在...

    以太坊solidity字符串拼接实现

    因此,开发者需要了解如何在Solidity中实现字符串拼接,这通常涉及到字节和字符串之间的转换以及有时借助第三方库。 首先,我们需要明确Solidity中字符串的处理方式。在早期版本的Solidity(0.4.x及之前),字符串...

    关于字符串相等的比较

    - Apache Commons Lang 提供了一系列工具类来简化字符串操作,如 `StringUtils`。 - 示例:使用 `StringUtils.equals` 方法进行比较。 #### 示例分析 给定的代码示例展示了如何使用 `equals` 方法来比较用户输入...

    java的String字符串补0

    ### Java的String字符串补0技术解析 #### 一、引言 在Java编程中,对字符串进行特定格式化的处理是一项常见的需求。其中,“补0”操作尤其常见于日期时间格式化、编号序列化等场景中。例如,在处理数据库查询结果时...

    Java StringUtils字符串分割转数组的实现

    Java StringUtils字符串分割转数组的实现 ...因此,在实际开发中,我们可以使用 StringUtils 中的 delimitedListToStringArray() 方法来实现字符串的分割,这样可以避免 split() 方法的缺陷,提高开发的效率和可读性。

    StringUtils(最新)

    1. **字符串空判断**:`StringUtils.isEmpty(String str)` 和 `StringUtils.isBlank(String str)` 方法用于检查字符串是否为空或者仅由空白字符组成。`isEmpty()` 只检查是否为 `null` 或长度为 0,而 `isBlank()` ...

    StringUtils 字符串工具

    StringUtils 字符串工具

    ASP.NET字符串处理

    本文将详细介绍如何使用提供的`StringUtils`类进行常见的字符串操作,包括随机生成字符串、字符串替换(区分和不区分大小写)、删除字符串中的特定内容以及处理HTML标签。 首先,`StringUtils`类提供了一个常量`...

    StringUtils

    String工具类 StringUtils

    StringUtils的各项用法

    总的来说,StringUtils类为Java开发者提供了强大的字符串处理工具,极大地简化了字符串操作,提高了代码的可读性和维护性。无论是检查字符串状态、清理空白字符,还是进行字符串的截取和分割,都显得游刃有余。熟练...

    常用字符串操作的实现方式

    ic boolean isNumeric (String str)方法示例:System.out.println(StringUtils.isNumeric("12345"));输出结果:true 二、字符串截取与拼接 1、 字符串截取 - 使用substring方法:String str = "HelloWorld"; ...

    commons-lang-StringUtils.zip

    2. **空白字符处理**:`StringUtils.trim(String str)`和`StringUtils.strip(String str)`可以去除字符串两端的空白字符,而`trimToEmpty(String str)`则会在去除空白后返回一个空字符串,而非`null`。 3. **分割与...

    apache和string字符串替换的比较

    总结一下,`String`类的`replace`方法是基础的字符串替换,而Apache Commons Lang的`StringUtils`提供了更加强大和灵活的字符串处理工具,如支持正则表达式的替换和多目标替换。在实际编程中,我们需要根据项目需求...

    StringUtils 中文API

    - **描述**:移除字符串开头和结尾的空白字符。 - **用法**: ```java StringUtils.trim(String str); StringUtils.strip(String str); ``` - **示例**: ```java String s = " hello world "; System.out...

    StringUtils jar包

    在Java标准库中,虽然`String`类已经提供了很多基本的字符串操作方法,但`StringUtils`提供了更多高级和便捷的功能,使得开发者可以更高效地进行字符串的检查、比较、格式化等操作。 在`StringUtils`中,你可以找到...

    StringUtils工具类的使用

    3. `isBlank(String str)`:从2.0版本开始引入,除了检查`null`和空字符串外,还会去除两端的空白字符后检查是否为空。例如: ```java System.out.println(StringUtils.isBlank(null)); // 输出:true System.out...

    commons-lang3-3.1 StringUtils字符串jar包

    commons-lang3-3.1 StringUtils字符串jar包 org.apache.commons.lang3.StringUtils的jar包

    StringUtils API 使用方法

    这个库是对 Java 标准库中的 `String` 类方法的一个扩展,尤其在处理 `null` 和空白字符时更加友好。在 `StringUtils` 中,所有的方法都是静态的,因此可以直接通过类名调用,如 `StringUtils.xxx()`。 **1. `...

    字符串管理

    此外,开源项目如Apache Commons Lang中的`StringUtils`类提供了丰富的字符串操作功能,这些都是学习字符串管理的好资源。 在工具方面,有一些专门的工具可以帮助我们分析和调试字符串相关的代码。例如,Valgrind是...

Global site tag (gtag.js) - Google Analytics