`
laorer
  • 浏览: 428009 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

<转>String.split的特殊情况

    博客分类:
  • j2EE
阅读更多
 
10月9日
使用String.split方法时遇到的问题(转载)
http://blog.csdn.net/jame_peng/archive/2006/05/22/749308.aspx
使用String.split方法时遇到的问题

今天在使用String.split()方法时因为使用"|"作分割符,总是得不到结果。于是在网上Google了一下,终于找到了答案。

在使用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("\\\\");

另在JDK API里找到此段说明,大意是为了防止正则表达式里的转义符与java语句里的"\"搞混,特用"\\"作转义符。
Backslashes within string literals in Java source code are interpreted as required by the Java Language Specification as either Unicode escapes or other character escapes. It is therefore necessary to double backslashes in string literals that represent regular expressions to protect them from interpretation by the Java bytecode compiler. The string literal "\b", for example, matches a single backspace character when interpreted as a regular expression, while "\\b" matches a word boundary. The string literal "\(hello\)" is illegal and leads to a compile-time error; in order to match the string (hello) the string literal "\\(hello\\)" must be used.

 

String.split()用法的一点经验
http://www.e-stu.net/Article/kaishixinxi/jisuanji/jsjja/JAZYYY/2007-01-04/Article_10008.html
作者:maxine 文章来源:本站原创 点击数: <script language="javascript" src="/Article/GetHits.asp?ArticleID=10008"></script>更新时间:2007-1-4 10:19:41
 
在java.lang包中有String.split()方法,返回是一个数组
我在应用中用到一些,给大家总结一下,仅供大家参考:
1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split("and|or");

 

分享到:
评论

相关推荐

    freemarker总结

    &lt;#case refValue&gt;...&lt;#break&gt; &lt;#case refValue&gt;...&lt;#break&gt; &lt;#default&gt;... &lt;/#switch&gt; 3、 list, break指令 list指令是一个迭代输出指令,用于迭代输出数据模型中的集合,list指令的语法格式如下: &lt;#list ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    &lt;/TITLE&gt; &lt;/HEAD&gt; &lt;BODY&gt; &lt;H1&gt; First PHP page &lt;/H1&gt; &lt;HR&gt; &lt;? // Single line C++ style comment /* printing the message */ echo "Hello World!"; # Unix style single line comment ?&gt; &lt;/BODY&gt; &lt;/HTML&gt; 2.4 数据...

    js使用小技巧

    &lt;a href="javascript:function()"&gt;word&lt;/a&gt; 上一网页源 asp: request.servervariables("HTTP_REFERER") javascript: document.referrer 释放内存 CollectGarbage(); 禁止右键 document.oncontextmenu = ...

    Android中Split()字符串分割特殊用法案例详解

    2.特殊用法–当split()分割字符串遇上特殊符号 案例分析 String str = abc|dfg; String[] all=str.split(|); system.out.println(all[0]); 结果为 a 原因分析 | 在正则表达式中是个已经被使用的特殊符号(”.”、”...

    leetcode添加元素使和等于-LeetCode:LeetCode解决方案和技巧

    数组转字符串 字符串转数组 字符串转数组 使用Java split() 方法 split() 方法根据匹配给定的正则表达式来拆分字符串。 注意: . 、 | 和 * 等转义字符,必须得加 \。多个分隔符,可以用 | 作为连字符。 // 字符串...

    it-leetcode

    常用方法地图Map&lt; String&gt; counts = new HashMap ();// 如果不存在,则返回0counts . getOrDefault(cur, 0 );细绳String domain = " 900 google.mail.com " ;// 分隔符 切分String [] cpinfo = domain . split( " \\...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    * \0mnn The character with octal value 0mnn (0 &lt;= m &lt;= 3, 0 &lt;= n &lt;= 7) \0mnn 十进制数 0mnn (0 &lt;= m &lt;= 3, 0 &lt;= n &lt;= 7) * \xhh The character with hexadecimal value 0xhh \xhh 十六进制数 0xhh...

    javascript文档

    fontcolor 方法 将 HTML 带 COLOR 属性的 &lt;FONT&gt; 标识添加到 String 对象中的文本两端。 fontsize 方法 将 HTML 带 SIZE 属性的 &lt;FONT&gt; 标识添加到 String 对象中的文本两端。 for 语句 只要指定的条件为 true,就...

    JScript 语言参考

    fontcolor 方法 将 HTML 带 COLOR 属性的 &lt;FONT&gt; 标识添加到 String 对象中的文本两端。 fontsize 方法 将 HTML 带 SIZE 属性的 &lt;FONT&gt; 标识添加到 String 对象中的文本两端。 for 语句 只要指定的条件为 true,就...

    微软JavaScript手册

    fontcolor 方法 将 HTML 带 COLOR 属性的 &lt;FONT&gt; 标识添加到 String 对象中的文本两端。 fontsize 方法 将 HTML 带 SIZE 属性的 &lt;FONT&gt; 标识添加到 String 对象中的文本两端。 for 语句 只要指定的条件为 true,就...

    HP-Unix命令 HP系统宝典

    Model String、SWID 和ssconfig............................ 10 操作系统................ 12 启动过程................ 12 PDC(Processor Dependent Code) .................. 12 ISL................... 13 ...

    TCL脚本语言编程

    VIVADO经常使用TCL脚本对FPGA进行调试,通过JTAG转AXI对内部模块进行控制,但是TCL语言书籍比较少,这边是一个英文的TCL语言学习书籍. 第 1 章. TCL基本知识...........................................................

    java 正则表达式

    控制表单内容只能输入数字,中文....&lt;script&gt;function test() {if(document.a.b.value.length&gt;50){alert("不能超过50个字符!");document.a.b.focus();return false;}}&lt;/script&gt;&lt;form name=a onsubmit="return test()...

    asp.net字符串分割函数使用方法分享

    下面这种方法是先将“[jb51.net]”替换成一个特殊字符,比如$,在根据这个字符执行Split 例如下面根据[jb51.net]分割 代码如下:string[] arrstr2 = str.Replace(“[jb51.net]”, “$”).Split(‘$’); 好了看其它...

    完整版Java全套入门培训课件 Java基础 06-集合(共24页).pptx

    String类 字符串是一个特殊的对象。 字符串一旦初始化就不可以被改变。 String str = “abc”; String str1 = new String(“abc”);...String[] split(String reg); String substring(int index); String(char[] arr);

    JavaScript笔记

    |--null:一个特殊的值,表示“无值”--空对象。数据类型为Object |--undefined:表示声明了变量但从未赋值或者对象属性不存在 10.双等号(==)和全等号(===): |--“==”为确定两个运算数是否相等,“==”...

    Python中的特殊语法:filter、map、reduce、lambda介绍

    filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回: 复制代码 代码如下: &gt;&gt;&gt; def f(x): return x % 2 != 0 ...

    c# 加密和解密相关代码

    else if (UnicodeChar &gt;= 110 && UnicodeChar &lt;= 122) //对字符进行解密 { UnicodeChar = UnicodeChar - 13; } else if (UnicodeChar &gt;= 65 && UnicodeChar &lt;= 77) //对字符进行加密 { UnicodeChar = UnicodeChar + ...

    C# for CSDN 乱七八糟的看不懂

    关系运算符 &lt;,&lt;=,&gt;,&gt;= 等于:== 不等于:!= 判断字符串 string 和 char 用 Equals 方法。 逻辑运算符 与:a & b 或:a | b 第8页 C#(WINFORM)学习 非:! A 模数运算符 模数运算符 (%) 计算第二个操作数除第一个...

    正则表达式

    \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,...

Global site tag (gtag.js) - Google Analytics