`
tory320
  • 浏览: 34012 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

java和javascript中实现substr_count

阅读更多
php中的方法真是不少,今天觉得自己实现一下substr_count。
由于今天比较忙,就没自己想实现方法,google了一下,发现了3种,其中的两个方法真是巧妙,我要是自己实现估计只能想到第一,也就是看起来最笨的那个。不过考虑一下性能,笨方法居然是最快的

package util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

/**
 * This class is used to test the performance of the method for getting how
 *** 
 **/
public class CountSubString {

	public static void main(String[] args) throws Exception{
		CountSubString count = new CountSubString();
		
		String source = "";
		String sub = "tan";
		StringBuffer sb = new StringBuffer();
		
		for (int i = 0; i < 1000000; i++) {
			sb.append("tan");
			sb.append("tory");
			sb.append("eddie");		
		}
		
        source = sb.toString();
        
        //String newSource = count.replace("tan", "aa", source);
          String newSource = source.replaceAll("t", "aa");
        //System.out.println(newSource);
        
        //File outPut = new File("d:/eclipse3.4/outputfile.dat");
        
        BufferedWriter bw = new BufferedWriter(new FileWriter("d:/eclipse3.4/outputfile.dat"));
        bw.write(newSource);
        bw.flush();
        bw.close();
		long timeStart = System.currentTimeMillis();
		int subStringCount = count.getCountByChar(source, sub);
		long timeEnd = System.currentTimeMillis();
		
		System.out.println("Sub String occurs times is: " + subStringCount);
		System.out.println("The method getCountByChar consumes " + (timeEnd - timeStart));
		
		timeStart = System.currentTimeMillis();
	    subStringCount = count.getCountByReplace(source, sub);
	    timeEnd = System.currentTimeMillis();
		System.out.println("Sub String occurs times is: " + subStringCount);
		System.out.println("The method getCountByReplace consumes " + (timeEnd - timeStart));
		
		timeStart = System.currentTimeMillis();
		subStringCount = count.getCountBySplit(source, sub);
		timeEnd = System.currentTimeMillis();
		System.out.println("Sub String occurs times is: " + subStringCount);
		System.out.println("The method getCountBySplit consume " + (timeEnd - timeStart));
		
		
	}

	public int getCountByChar(String source, String sub) {
		int count = 0;
		int pos = source.indexOf(sub.charAt(0));

		do {
			next: if (pos > -1) {
				// boolean isEqual = true;
				for (int j = 1; j < sub.length(); j++) {
					if (source.charAt(pos + j) != sub.charAt(j)) {
						// isEqual = false;
						break next;
					}
				}

				// if (isEqual)
				count++;

			}

			pos = source.indexOf(sub.charAt(0), pos + 1);

		} while (pos != -1);

		return count;
	}

	public int getCountBySplit(String source, String sub) {
		int count = 0;

		String[] sourceArray = source.split(sub);
		count = sourceArray.length - 1;

		return count;
	}
	
	public int getCountByReplace(String source, String sub) {
		int count  = 0;
		
		count = (source.length() - source.replaceAll(sub, "").length()) / sub.length();
		
		return count;
	}
	
	
}

java的实现有了,javascript就很好办了
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<title>Sub String Count</title>
<head>
<script type="text/javascript">
//get the count of the sub string occurs in the source
function getCountByChar(source, sub) {
	var count = 0;
    var pos = source.indexOf(sub.charAt(0));
   
    do {
	//next:
      if (pos > -1) {
			  var isEqual = true;
		   for (var i = 1; i < sub.length; i++) {
			if (source.charAt(pos + i) != sub.charAt(i)) {
			    isEqual = false;
				break;
			}
					
		  }
		if (isEqual) 
	    count++;
	  }
	  pos = source.indexOf(sub.charAt(0), pos + 1);
   } while(pos > -1)
   
   return count;
}

function getCountBySplit(source, sub) {
	var count = 0;
	count = source.split(sub).length - 1;
	return count;
}

function getCountByReplace(source, sub) {
	var count = 0;
	var replacSource = source.replace(/tan/g, "");
	count = (source.length - replacSource.length) / (sub.length) ;
	return count;
}

function capSentence() {
    var str = document.getElementById("content").value;
	var result = document.getElementById("resultDiv");
	result.innerHTML = str + escape("Programming PHP啊");
	document.getElementById("resultChar").value = getCountByChar(str, "tan") + "getCountByChar";
	document.getElementById("resultSplit").value = getCountBySplit(str, "tan") + "getCountBySplit";
	document.getElementById("resultReplace").value = getCountByReplace(str, "tan") + "getCountByReplace" ;
}
</script>

<style type="text/css">
input.cap {text-transform: capitalize;}
</style>
</head>

<body>

<input id="content" class="cap" type="text" />
<input type="button" onclick="capSentence();" value="Capitaliz" />
<div id="resultDiv"></div>
<input id="resultChar"  type="text" />
<input id="resultSplit"  type="text" />
<input id="resultReplace"  type="text" />
</body>
</html>

调试过程中发现了几个问题,
第一, java的当字符串很长的时候replaceAll方法会抛outofmemory异常,字串匹配的越多,需要的内存就越大。给eclipse加上如下参数可以增加虚拟机的内存-Xms32m -Xmx256m
第二, 也就是昨天发现的javascript的replace方法,只有以/tan/g形式才能替换所有的字串,但目前只找到这种hardcode的方法,不知道怎么通过变量实现
分享到:
评论

相关推荐

    java技术综合考试答案

    JavaScript中的字符串方法`substr(1,4)`会返回从索引1开始的4个字符,所以`"abcdefg".substr(1,4)`的结果是`"bcde"`。 在IE中,`"&amp;TE&nbsp;ME&gt"`会被解析为`"&TE ME&gt;"`。`eval()`函数可以执行字符串作为...

    java中如何截取字符串.txt

    根据提供的文件信息,本文将详细解释Java中截取字符串的各种方法及其使用场景,并结合部分示例代码进行说明。 ### Java中截取字符串的方法 在Java编程语言中,字符串的处理是一项非常重要的技能,特别是在开发中...

    javaScript常用函数使用总结

    JavaScript常用函数使用总结涵盖了多种在JavaScript编程中常用的方法,它们分别属于不同的类型,如String类型和Number类型。以下是对每个函数详细的说明和应用示例: 1. parseInt()函数 parseInt()是String类型的...

    java笔试题.docx

    Java笔试题涵盖了许多核心概念,对于提升面试能力和深入理解Java编程至关重要。以下是对这些知识点的详细解释: 1. Java参数传递:Java采用传值方式进行参数传递。这意味着在方法调用时,传递的是变量的副本,而...

    js宝典学习笔记,记录JAVA SCRIPT宝典中的内容

    JavaScript 支持两种类型的注释:单行注释(`//`)和多行注释(`/* */`)。例如: ```javascript // 这是一个单行注释 /* 这是一个 多行注释 */ ``` ### 3. HTML 文档结构 HTML文档的基本结构如下: ```html &lt;!...

    在b/s开发中经常用到的javaScript技术

    在b/s开发中经常用到的javaScript技术整理 Posted on 2006-02-17 15:55 MeiYU 阅读(377) 评论(0) 编辑 收藏 一、验证类 1、数字验证内 1.1 整数 1.2 大于0的整数 (用于传来的ID的验证) 1.3 负整数的验证 1.4 ...

    mongodb group aggregate项目实战笔记

    1. **更高的灵活性**:可以通过多个阶段来组合复杂的查询逻辑,实现更为精细的数据筛选和处理。 2. **更好的性能**:MongoDB 内部对 `aggregate` 管道进行了优化,尤其是在大数据量的情况下,能够更快地完成数据处理...

    java script js 函数大全

    JavaScript 是一种轻量级的编程语言,常用于实现网页上的交互功能。下面我们将详细介绍一些最基本的 JavaScript 函数及其应用场景。 #### 二、文档对象模型(DOM)操作 1. **`document.write("")`**: 这个函数可以...

    字符串按照指定的字节数来截取

    在Java中,我们可以使用`substring()`方法结合`getBytes()`来实现。但是,Java的字符串是Unicode的,`getBytes()`会根据指定的字符集编码字符串为字节数组。例如: ```java String str = "你好,世界"; int byte...

    phpend-maste大一大二笔记

    4. **字符串处理**:PHP提供了丰富的字符串操作函数,如`substr()`截取子串,`strpos()`查找子串位置,`str_replace()`替换子串,`explode()`和`implode()`分割和合并字符串。 5. **数组操作**:PHP支持索引数组和...

    PHP 详细 教程

    函数是PHP编程中的关键部分,比如字符串处理函数(str_replace、strpos、substr等)、数组操作函数(array_push、array_pop、count等)、文件系统函数(file_get_contents、file_put_contents、mkdir等)以及错误...

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

    题目中提到的四组函数,选项D中的STR(3.14,3,1),DTOC(DATE()),SUBSTR("ABCD",3,1)返回值类型分别是字符串、字符串和字符,都是字符型数据,因此答案是D。这展示了对函数返回值类型的理解和数据类型的匹配原则。 2...

    PHP实用教程(第2版).rar

    4. **字符串与数组操作**:介绍PHP中的字符串处理函数,如strlen、substr、strpos等,以及数组操作函数,如array、count、sort等。 5. **文件操作**:讲解如何在PHP中读取、写入、复制、删除和移动文件,以及如何...

    AJax实现类似百度搜索栏的功能 (面试多见)

    在 Web 开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的异步更新,提供更好的用户体验。在这个案例中,我们将探讨如何使用 Ajax 实现一个简单的百度搜索栏功能,即当用户在输入框中键入...

    如何用javascript计算文本框还能输入多少个字符

    下面代码超简单,不多说了,直接上代码。 //输入计数 //count:能輸入的數據總量 ... $(v).val($(v).val().substr(0, count)); valLength = count; } span.text("您已輸入" + valLength + "字元,還剩下" + (c

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    面向对象的思想方法已经非常流行了,在编程语言(例如java,js)中,都运用面向对象的编程思想。在XML中,就是要将网页也作为一个对象来操作和控制,我们可以建立自己的对象和模板。与对象进行交流,如何命令对象,...

    WT_LAB

    7. **数组操作**:`count()`计算元素数量,`foreach`循环遍历数组,`array_push()`和`array_pop()`在数组末尾添加或删除元素。 8. **文件操作**:PHP可以读写文件,如`file_get_contents()`读取文件,`file_put_...

    17240007-Q-9

    13. **PHP与前端交互**:通过AJAX(Asynchronous JavaScript and XML)技术,PHP可以与JavaScript配合,实现页面的异步更新。 14. **服务器配置**:PHP通常与Apache或Nginx等Web服务器配合,配置文件一般为php.ini...

    strings-methods-practice-js-prac

    在JavaScript编程语言中,字符串是不可变的数据类型,这意味着一旦创建了一个字符串,就不能更改它的内容。这个名为"strings-methods-practice-js-prac"的练习项目显然旨在帮助开发者熟悉JavaScript中处理字符串的...

    INFO263

    它的语法吸收了C语言、Java和Perl的特点,易于学习,且功能强大,可以嵌入到HTML中使用。 1. **PHP安装与环境配置**:在开始学习PHP之前,你需要安装PHP运行环境,如XAMPP或WAMP,它们包含了Apache服务器、MySQL...

Global site tag (gtag.js) - Google Analytics