`
annan211
  • 浏览: 460926 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

比 StringTokenizer 更加优化的字符串分割

 
阅读更多

  上篇文中说到,StringTokenizer 是相对比较快的字符分割方法,split和正则表达式 是java 建议的使用方法,subString 在原始字符串很大,切割操作又被高频使用的情况下很容易出现 内存溢出的情况。但是 substring 确实执行的很快,字符串操作中 还有其他方法比如 indexOf 执行的也非常高效,我们是不是可以自己组合,使用高效方法同时避免内存溢出。实例代码仍然采用 前一篇文中的代码。




 

package String;

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {

		StringBuffer sb = new StringBuffer();
		for(int i=0;i<10000;i++){
			sb.append(i);
			sb.append(";");
		}
		long begin = System.currentTimeMillis();
//		StringTokenizerDemo.split(sb.toString());// 15665
		StringTokenizerDemo.token(sb.toString());//6679
		System.out.println(System.currentTimeMillis()-begin);
	}

	public static void split(String str){
		for(int i=0;i<10000;i++){
			str.split(";");
		}
	}

	public static void token(String str){
		StringTokenizer st = new StringTokenizer(str,";");
		for(int i=0;i<10000;i++){
			while(st.hasMoreTokens()){
				st.nextToken();
			}
					}
	}

}

   


上面这段代码,使用原始的 split方法  耗时 15665, 使用StringTokenizer 耗时 多集中在 58,如果处理得当,我们可以试试 我们自己的组合方法(index和substirng) 看下面代码。



package String;

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {

		StringBuffer sb = new StringBuffer();
		for(int i=0;i<10000;i++){
			sb.append("sb-"+i);
			sb.append(";");
		}
		long begin = System.currentTimeMillis();
//		StringTokenizerDemo.split(sb.toString());// 15665
		StringTokenizerDemo.token(sb.toString());//58
//		StringTokenizerDemo.indexSubstring(sb.toString());//56
		System.out.println(System.currentTimeMillis()-begin);
	}

	public static void indexSubstring(String str){
		for(int i=0;i<10000;i++){
			while(true){
				int index = str.indexOf(";");
				if(index<0)
					break;
				System.out.println(str.substring(0, index));
				str = str.substring(index+1);
			}
		}
	}

	public static void split(String str){
		for(int i=0;i<10000;i++){
			System.out.println(str.split(";")[i]);
		}
	}

	public static void token(String str){
		StringTokenizer st = new StringTokenizer(str,";");
		for(int i=0;i<10000;i++){
			while(st.hasMoreTokens()){
				System.out.println(st.nextToken());
			}
		}
	}

}




多执行几次,你会发现 组合使用的方法  甚至比 StringTokenizer 还要快,多集中在 55-56,组合方式 避免了内存溢出 和 空间浪费,是高频调用的良方。
分享到:
评论

相关推荐

    字符串分析,分别输出字符串中个单词,并统计出单词个数

    在本文中,我们关注的是如何将一个包含多个单词的字符串分割成单个的单词(即Token),并计算这些单词的总数。 #### 2. 使用`StringTokenizer`类 Java提供了内置的`StringTokenizer`类来帮助开发者轻松地完成字符...

    java笔试算法题及答案.pdf

    "Java笔试算法题及答案" 本资源是一份Java笔试算法题及答案的 ...这份资源涵盖了多个 Java 算法题目和解决方案,涵盖了字符串分割、数组排序、字符串截取、Unicode 字符、数组操作、方法重载和代码优化等多个知识点。

    java performance2

    - **字符串分割**:对于简单的字符串分割操作,建议使用`String.split()`方法,但对于复杂的分割逻辑,可以考虑使用`StringTokenizer`类。 - **字符串池与intern()方法**:对于经常重复使用的字符串,可以利用字符...

    Java代码的优化.doc-综合文档

    2. `StringTokenizer`是另一种高效的字符串分割工具。相比于`split()`,它使用迭代器模式,减少了内存分配,特别适合处理复杂的分隔符情况。 3. `indexOf()`方法用于查找字符串中的特定字符或子串。虽然它简单直观...

    java基础编程试题

    1. **字符串分割**: - 使用`StringTokenizer`类或`String.split()`方法来根据逗号分割字符串。在提供的代码中使用了`StringTokenizer`。 - `StringTokenizer`通过`hasMoreTokens()`和`nextToken()`方法遍历并获取...

    android字串的拆分问题

    这将按照 `-` 分割字符串,得到 `"1"`, `"2"`, `"3"`, `"4"`, `"5"`。 在Android中,字符串拆分的应用非常广泛,比如解析CSV数据、处理JSON字符串、分析用户输入等。需要注意的是,`split()` 方法会返回一个字符串...

    JSP获取客户端的浏览器和操作系统信息

    - 使用`StringTokenizer`类对字符串进行分割。 - 分割依据通常是分号(`;`),但由于实际`User-Agent`字符串中可能不包含分号,这里假设字符串已经被适当处理过。 ```java StringTokenizer st = new ...

    JSP获取客户端的浏览器和操作系统信息.pdf

    这里我们采用简单的字符串分割方法来进行处理: ```java StringTokenizer st = new StringTokenizer(agent, ";"); st.nextToken(); // 忽略第一个分隔符之前的部分 String userBrowser = st.nextToken(); // 得到...

    华为Java面试题与详细代码

    这个方法通过`StringTokenizer`对逗号进行分割,然后将结果存储在`String`数组中。接着,我们可以使用`Integer.parseInt`将`String`数组转换为`int`数组。最后,通过`Arrays.sort`对数组进行排序,可以选择升序或...

    C++ Programming HOW TO

    StringTokenizer 类用于将字符串分割成多个子串,常用于解析命令行参数或文本文件。 #### 8. Renaming the String Class 有时候为了防止命名冲突或更好地适应项目需求,开发者可能需要对String类进行重命名。 ###...

    有关学生成绩管理系统的程序

    - **字符串分割**:使用`StringTokenizer`类来分割字符串,以便更高效地处理大量文本数据。 ### 8. 软件工程实践 最后,从这段代码还可以学到一些软件工程方面的知识: - **模块化设计**:通过将不同的功能封装到...

    java相关实验题小实验程序

    4. **字符串分割工具:** Java 提供了多种字符串处理工具,其中 `StringTokenizer` 是用于分割字符串的工具类。 - **答案:** C. StringTokenizer ### 窗口操作 5. **创建窗口:** 在Java中,创建一个带有标题的...

    JAVA获取网页有效邮箱地址

    接下来利用`StringTokenizer`对字符串进行分割,统计分割后的token数量并展示在文本区域。最后遍历所有的token,通过调用`isNameAdressFormat`方法来筛选出有效的邮箱地址并展示出来。 #### 总结 本文介绍的Java...

    C++Programming HOW TO

    `StringTokenizer.h`用于分割字符串。它可以将一个字符串按照指定的分隔符拆分成多个部分,这对于解析配置文件或处理命令行参数等场景非常有用。 #### 8. 重命名String类 有时候,为了避免名称冲突或适应项目的...

    JavaEye论坛热点推荐_-_2009年09月_-_总第16期.pdf

    - **StringTokenizer被淘汰**:建议使用更现代的分割字符串的方法,如`String.split()`。 - **JDK7新增的工具方法**:列举了JDK7中新增的一些实用工具方法,如`Objects.equals()`、`Arrays.copyOfRange()`等。 6....

    AndroidTXT-文本阅读器源码.zip

    5. **文本解析**:解析TXT文件内容通常涉及字符串处理,如分割行、处理特殊字符等。Android可能使用`StringTokenizer`或正则表达式来实现。 6. **TextView与WebView**:Android中的`TextView`可以显示纯文本,但若...

    JCLF:Java编程语言的通用实用程序类库-开源

    JCLF可能提供了更强大、更灵活的字符串解析和分割功能,使得开发者能够更方便地处理复杂的字符串操作。 此外,JCLF还提供了增强的`Properties`替代品。`Properties`类在Java中用于处理配置文件,但其功能可能无法...

    java实用教程

    - 字符串解析:`StringTokenizer`类 **5.16 字符串与字符、字节数组** - **字符串与字符数组**: - 将字符串转换为字符数组:`str.toCharArray();` - 将字符数组转换为字符串:`new String(charArray);` - **...

    JavaPractice:最简单的常见面试算法

    - **字符串分割与连接**:使用StringTokenizer或正则表达式处理字符串。 6. **复杂度分析**: - **时间复杂度**:评估算法执行所需的时间资源,如O(n),O(n^2)等。 - **空间复杂度**:评估算法执行所需的内存...

Global site tag (gtag.js) - Google Analytics