`

Java中字符串的分隔问题 "|" "." "*" "_" 特殊符号解决方案

 
阅读更多

 

StringTokenizer(字符串分隔解析类型)java.util.StringTokenizer 

功效:将字符串以定界符为界,分析为一个个的token(可理解为单词),定界符可以自己指定。 


1、构造函数。 

1. StringTokenizer(String str) :构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。 
2. StringTokenizer(String str, String delim) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符。如new StringTokenizer("A|001:B|002:C|003",":"); 
3. StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。 
2、方法。 
说明: 
1. 所有方法均为public; 
2. 书写格式:[修饰符] <返回类型> <方法名([参数列表]) 

1. int countTokens() :返回nextToken方法被调用的次数。如果采用构造函数1和2,返回的就是分隔符数量(例2)。 
2. boolean hasMoreTokens() :返回是否还有分隔符。 
3. boolean hasMoreElements() :结果同2。 
4. String nextToken() :返回从当前位置到下一个分隔符的字符串。 
5. Object nextElement() :结果同4。 
6. String nextToken(String delim) :与4类似,以指定的分隔符返回结果。 
3、例子。() split 与 StringTokenizer 的萧萧区别! 

import java.util.StringTokenizer; 
public class StringTokenizerDemo 

public static void main(String args[]) 

String str="100|66,55:200|567,90:102|43,54"; 
String abc="A|B|C|D"; 
StringTokenizer strToke=new StringTokenizer(str,":");//默认不打印分隔符 
//StringTokenizer strToke=new StringTokenizer(str,":",true);//打印分隔符 
//StringTokenizer strToke=new StringTokenizer(str,":",false);//不打印分隔符 
int size=strToke.countTokens();//3 & 5 
System.out.println("strToke count = "+size); 
while(strToke.hasMoreElements()) 

System.out.println(strToke.nextToken()); 
//System.out.println(strToke.nextElement()); //效果同上 

//String[] str_abc=str.split("\\|");//结果与StringTokenizer一样 
String[] str_abc=str.split("|");//得到不同的结果 
for(int i=0;i<str_abc.length;i++) 

System.out.println(str_abc[i]); 





No. 2 
zz from http://77857.blog.51cto.com/67857/142324 

<!>比较两种表示法利用split函数:String s = new String("2_8_7_4_3_9_1"); 
String[] arr = s.split("_"); 
●利用StringTokenizer类:String s = new String("2_8_7_4_3_9_1"); 
StringTokenizer commaToker = new StringTokenizer(s, "_"); 
String[] arr = new String[commaToker.countTokens()]; 
<2>split用法详解在java.lang包中有String.split()方法,返回是一个数组 
我在应用中用到一些,给大家总结一下,仅供大家参考: 
1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 
2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|"); 
“.”和“|”都是转义字符,必须得加"\\"; 
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split("and|or"); 
测试程序如下:public class StringSplit { /** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 
String a="acount=? and uu =? or n=?"; 
String b[]=a.split("and|or"); 
for(int i=0;i<=b.length;i++) 

System.out.println(b[i]); 
}   }} 
输出结果:acount=? 
uu =? 
n=? 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 
at com.ljj.string.StringSplit.main(StringSplit.java:14) 

No.3 


String.split方法 

使用String.split方法时要注意的问题在使用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 System.out.println("--"+aa); 
}用竖 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。String[] aa = "aaa*bbb*ccc".split("*"); 
//String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能得到正确的结果for (int i = 0 ; i System.out.println("--"+aa); 
}显然,+ * 不是有效的模式匹配规则表达式,用"\\*" "\\+"转义后即可得到正确的结果。"|" 分隔串时虽然能够执行,但是却不是预期的目的,"\\|"转义后即可得到正确的结果。还有如果想在串中使用"\"字符,则也需要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果:String[] aa = "aaa\\bbb\\bccc".split("\\\\");
分享到:
评论

相关推荐

    java经典面试题

    - 一种经典的多线程问题解决方案,涉及生产者线程和消费者线程。 25. **`ThreadLocal` 的设计理念与作用**: - 提供线程本地变量,避免数据共享带来的竞争条件。 26. **`ThreadPool` 用法与优势**: - 通过...

    正则表达式系统教程.zip

    正则表达式是一种模式匹配工具,它用于在文本中搜索、替换或提取符合特定规则的字符串。这个"正则表达式系统教程.zip"文件显然包含了深入学习正则表达式的资源,帮助用户理解和掌握这一强大的技术。 正则表达式的...

    Java正则表达式的10大问题.pdf

    在Java字符串中,正则表达式的特殊字符需要双转义。例如,要匹配美元符号"$",需要写作`"\\"`或使用`Pattern.quote("$")`。 5. 分隔符在`split()`中的逃逸 `split()`函数接收正则表达式作为参数,元字符(如`|`)...

    Java后端面试题大纲(涵盖了百分之九十的考点).pdf

    - `ThreadLocal`提供了一个线程局部变量的解决方案,每个线程都有独立的变量副本。 - 避免了通过参数传递变量的麻烦,但也可能导致内存泄漏。 #### 计算机网络 1. **URL解析过程** - 输入URL后,首先解析域名...

    编译原理实验报告词法分析器

    4. 检测并返回运算符、分隔符等特殊符号。 5. 忽略程序中的注释和空白字符。 ### 二、设计方案 词法分析器通常采用状态机模型来实现,具体可以分为以下步骤: 1. **输入预处理**:去除源代码中的空格、换行、制表...

    词法分析器

    在实践中,开发者可能使用了Java的字符串处理功能,正则表达式库,或者专门的词法分析库如JFlex或Antlr来完成任务。这些工具可以帮助生成符合特定语言规范的词法分析器,处理输入源码并生成相应的记号流。 实践报告...

    黑马Java基础口述总结

    - **解决方案**:使用迭代器的`remove()`方法安全地删除元素。 #### 48. HashSet如何保证元素唯一性 - **原理**:通过`hashCode()`和`equals()`方法来判断元素是否相等。 - **实现**:每个元素都会根据其`hashCode...

    找出各个字符个数

    5. **其他字符**:包括标点符号、特殊符号、换行符等,这些字符可以是ASCII码表中的任何非字母和数字的字符。 实现这一功能的方法有很多种,以下是几种常见的编程语言的解决方案: **Python**: ```python def ...

    源代码正则

    在软件开发过程中,正则表达式(Regular Expression)是一种强大的文本处理工具,被广泛应用于字符串搜索与替换、模式匹配等场景。对于源代码分析而言,利用正则表达式可以高效地提取或验证特定的代码结构或语法。...

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

    除撇号外,所有非字母数字的Java字符串拆分 // 用除英文字符以外的所有符号 分割 words= Str.split("\\W+"); words = Str.split("[^\\w']+"); // 非特殊英文字符 words = Str.split("[^a-zA-Z0-9']+"); // 特殊英文...

    jmapper-issue:重新创建与生成的代码中存在的$符号有关的jmapper问题

    在Java中,"$"符号有特殊含义,特别是在枚举、匿名内部类和字符串模板中。当JMapper生成的代码包含"$"时,可能导致解析错误或运行时异常。为了定位和修复问题,开发者需要编写测试用例来重现这个问题,以便分析其...

    reverse-words:反转给定字符串中的单词 (http

    在IT行业中,编程是一项至关重要的技能,而Java作为一款广泛应用的编程语言,其在处理字符串操作上具有丰富的库函数和方法。本项目“reverse-words”聚焦于一个特定的字符串处理任务:反转给定字符串中的单词顺序。...

    2021-2022计算机二级等级考试试题及答案No.17497.docx

    - **解决方案**:在访问数组之前确保索引的有效性,可以通过条件判断等方式来避免此类错误。 ### 10. 计算机程序设计语言 - **举例**:Basic是常见的编程语言之一,用于编写各种类型的计算机程序。 - **特点**:...

    简单实例处理url特殊符号&amp;处理(2种方法)

    在处理URL时,我们经常会遇到特殊符号,特别是`&`符号,因为它在URL中通常用于分隔查询参数。本文将介绍两种处理URL中特殊符号,尤其是`&`的方法,以及一些网络分享的相关策略。 首先,当URL参数内容包含`&`时,...

    ubuntu部落(适合初学者,可以作为初学者的手册)

    - **社区支持**:拥有庞大的全球社区支持,用户可以轻松找到解决方案。 - **易于使用**:界面友好,对于新手非常友好。 - **安全性高**:由于其开源特性以及活跃的社区维护,Ubuntu的安全性很高。 - **软件丰富**:...

    java 编程常用英语单词 解释

    - **用途**:使用框架可以大大简化开发过程,并提供一致的解决方案。 #### Generic (泛型) - **定义**:泛型是一种编写具有通用类型的代码的技术。 - **用途**:使用泛型可以避免重复编写类似的代码,并提高代码的...

    Oracle Pro C 程序开发 .pdf

    - **错误和警告**:了解常见错误及其解决方案对于开发高质量的程序非常重要。 #### 五、开发嵌入式 PRO C 程序过程 - **程序编写规范** - **注释**:使用清晰的注释有助于提高代码的可读性和可维护性。 - **...

    不同风格TextView显示数量的钱

    源码提供了一个解决方案,使得开发者可以方便地在Android应用中显示各种货币格式的数值,而无需复杂的字符串格式化或额外的库。源码兼容最低的Android SDK版本为14,这意味着这个自定义控件可以在Android 4.0 (Ice ...

Global site tag (gtag.js) - Google Analytics