`
fuhao9611
  • 浏览: 85399 次
  • 性别: Icon_minigender_1
  • 来自: 陕西 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用String.split()所遇到的问题~~迷惑

阅读更多
昨天遇到了一个问题,从前台传来一个字符串,在后台需要split进行拆分,发现结果出乎我的意料,问题如下:
从前台传来的字符串是:a|b|c|d|,需要使用split以|来进行拆分,代码如下:

public static void main(String[] args) {
		String str1 = "a|b|c|d|";
		String[] arr1 = str1.split("|");
		System.out.println("数组arr1的大小是:"+arr1.length);
		for (int i = 0; i < arr1.length; i++) {
			System.out.println("----arr1["+i+"]:"+arr1[i]);
		}

最后打印出来的结果不是我所预期的:
数组arr1的大小是:9
----arr1[0]:
----arr1[1]:a
----arr1[2]:|
----arr1[3]:b
----arr1[4]:|
----arr1[5]:c
----arr1[6]:|
----arr1[7]:d
----arr1[8]:|

数组的大小本来预期的是:4,现在怎么打印出来的是:9
不知道问题出在那里了,最后将前台传来的字符串不使用"|",使用":"来把它们隔开,问题解决了。
将字符串换成:"a:b:c:d:"后的代码:
public static void main(String[] args) {
       String str2 = "a:b:c:d:";
       String[] arr2 = str2.split(":");
       System.out.println("数组arr2的大小是:"+arr2.length);
       for (int i = 0; i < arr2.length; i++) {
	  System.out.println("----arr2["+i+"]:"+arr2[i]);
       }
 }

打印出来的结果,遇到预期的是一致的:
数组arr2的大小是:4
----arr2[0]:a
----arr2[1]:b
----arr2[2]:c
----arr2[3]:d

难道使用"|"和":",对于split来说会有不同对待,迷惑,期待高手的指点~~~
分享到:
评论
9 楼 czxiyj 2007-09-28  
觉得用什么拆分不重要,重要的是明白其中的道理.
建议不用深入研究Regular Expression , 拿来会用,能给别人请明白
这就够了...除非要想做研究的..
8 楼 bigpanda 2007-09-27  
好好学习Regular Expression, | 是regular expression 的 meta character,表达 OR ,比如这个regular expression "(b|p)est",
match pest, best, 但是不match mest。

推荐读读Apress 的一本书 Java Regular Expressions: Taming the java.util.regex Engine
7 楼 baibai326 2007-09-26  
了解一下正则。
6 楼 白浪滔天 2007-09-26  
噢,原来如此
5 楼 javachs 2007-09-25  
我们也是用:来拆分的。
4 楼 sacredlove 2007-09-25  
我觉得最好的方法使用空格来拆分,一般不会错
3 楼 fuhao9611 2007-07-20  
哦,原来是这么回事呀,谢谢!
2 楼 tjliyaling 2007-07-20  
在使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。

我们看jdk doc中说明
public String[] split(String regex)
Splits this string around matches of the given regular expression.
参数regex是一个 regular-expression的匹配模式而不是一个简单的String,他对一些特殊的字符可能会出现你预想不到的结果,比如测试下面的代码:

用竖线 | 分隔字符串,你将得不到预期的结果

    String[] aa = "aaa|bbb|ccc".split("|");
    //String[] aa = "aaa|bbb|ccc".split("\\|"); 这样才能得到正确的结果

    for (int i = 0 ; i <aa.length ; i++ ) {
      System.out.println("--"+aa[i]);
    }

用竖 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。

    String[] aa = "aaa*bbb*ccc".split("*");
    //String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能得到正确的结果   

    for (int i = 0 ; i <aa.length ; i++ ) {
      System.out.println("--"+aa[i]);
    }

显然,+ * 不是有效的模式匹配规则表达式,用"\\*" "\\+"转义后即可得到正确的结果。

"|" 分隔串时虽然能够执行,但是却不是预期的目的,"\\|"转义后即可得到正确的结果。

还有如果想在串中使用"\"字符,则也需要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果:

String[] aa = "aaa\\bbb\\bccc".split("\\\\");




1 楼 WorkingHard?! 2007-07-20  
http://blog.csdn.net/zmxj/archive/2005/04/29/367779.aspx
String[] strArray = str.split("\\|");

相关推荐

    String.split()方法使用总结

    标题明确指出本文将围绕`String.split()`方法的使用进行深入探讨,旨在总结其功能、用法以及一些实践中的注意事项。这表明文章的目标读者是对Java编程有一定了解,希望提升自己在字符串操作方面技能的人群。 ### ...

    Java中String.split()用法小结

    如果要作为分隔符使用,也需要进行转义,如`String.split("\\|")`、`String.split("\\*")`和`String.split("\\+")`。如果不进行转义,它们会被解析为正则表达式的一部分,导致不预期的结果或异常。 3. **多个分隔符...

    power-split:有时string.split()还不够!

    功率分配因为有时String.split()还不够! 这是一个小型的Typescript库,我出于无奈而从头开始编写了命令行解析器。 它提供了一些实用程序方法来解决一些用例,而这些用例String.split()调用将无法解决。它能做什么?...

    android String.xml Excel 相互转换工具

    为了方便管理这些多语言资源,Android使用`String.xml`文件来存储应用中的文本字符串。然而,手动编辑这些XML文件既耗时又容易出错,尤其是在处理大量文本时。这时,就需要借助一些工具进行`String.xml`与Excel之间...

    String类的intern、split方法

    String类的intern、split方法 String 类的 intern 方法是一个本地方法,定义如下:public native String intern();该方法返回一个字符串对象的内部化引用,由 String 类维护一个初始为空的字符串的对象池,当 ...

    C# 中string.split用法详解

    string[] sArray=s.Split('c') ; foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab deab deab de 第二种方法 我们看到了结果是以一个指定的字符进行的分割。使用另一种构造方法对...

    string-split.js:柯里化的 `String.prototype.split` 支持按字符串、RegExp 或函数进行拆分

    柯里化的String.prototype.split支持按字符串、正则表达式或函数进行拆分。 npm install string-split --save npm 统计信息 例子 要求 var split = require ( 'string-split' ) ; 完整的应用程序 split ( "." , ...

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

    总结来说,Java的`String.split()`方法在处理结尾空字符串时,可能因为默认行为而丢失这部分内容。为了避免这种情况,可以使用`split(regex, -1)`形式的重载方法,确保所有的子字符串,包括结尾的空字符串,都能被...

    java的String[] split 示例

    String array[] = (String[]) s1.split("\\|"); // 使用 "|" 作为分隔符进行分割 System.out.println("Test: " + Arrays.toString(array)); // 输出分割后的字符串数组 } ``` 在这段代码中: 1. 第2行定义了一个...

    sql 分割字符串 dbo.Split('',',')

    将字符串按某个固定字符拆分成一个表结构(value,id) eg:1,2,3,3,4 拆分后: value id 1 1 2 2 3 3 3 4 4 5

    String split函数

    例如,使用“.”作为分隔符时,必须使用`String.split("\\.")`,否则将无法正确地分隔字符串。 2. 使用“|”作为分隔符时,需要使用`String.split("\\|")`,否则将无法正确地分隔字符串。 3. 在一个字符串中有多个...

    string.h库文件

    *string.h - declarations for string manipulation functions * * Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: * This file contains the function declarations for the string * ...

    C#中字符串优化String.Intern、IsInterned详解

    C#中字符串优化String.Intern、IsInterned详解 C#中字符串优化是指在编程过程中对字符串进行优化,以减少内存占用和提高...通过使用String.Intern和String.IsInterned方法,可以减少内存占用,提高程序的运行效率。

    C语言库函数源码(string.h)

    本资源"**C语言库函数源码(string.h)**"是一个宝贵的参考资料,包含了C标准库中`string.h`头文件下的多个库函数的源代码。了解这些源代码能帮助我们深入理解C语言的工作原理,优化自己的程序,并学习如何编写更...

    HexString_To_String.zip_Labview 16进制字符串转字符串_heldxt4_hexstring_ra

    总之,LabVIEW中的16进制字符串转字符串涉及到了字符串处理、数字转换等基础知识,而提供的“HexString_To_String.vi”应该是一个自定义的解决方案,它封装了这个转换过程,方便用户直接使用。通过研究这个VI,你...

    mysql 中的 sqlstring.h

    不知为何,mysql的开发包中竟然没有 sqlstring.h 这个文件,当你编译时它就提示你找不到这个文件

    asp.net下String.prototype.split()的兼容问题

    IE的String.prototype.split()函数bug 脚本: “a:b:c”.split(/(:)/)  Firefox输出: [“a”,”:”,”b”,”:”,”c”] IE7/8(含IE9兼容的模式)输出:  a,b,c IE9 中文本框中出现了 \n时 会把他保留 需要去掉 而...

    String和string区别以及string详解.doc

    但在性能敏感的场景下,可以直接调用`String`类的方法,如`String.IsNullOrEmpty()`,这样可以避免额外的类型转换,提升程序执行效率。 - 字符串相等性测试时,使用`string`比直接比较两个`String`对象更直观,因为...

Global site tag (gtag.js) - Google Analytics