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的方法,不知道怎么通过变量实现
分享到:
相关推荐
JavaScript中的字符串方法`substr(1,4)`会返回从索引1开始的4个字符,所以`"abcdefg".substr(1,4)`的结果是`"bcde"`。 在IE中,`"&TE ME>"`会被解析为`"&TE ME>"`。`eval()`函数可以执行字符串作为...
根据提供的文件信息,本文将详细解释Java中截取字符串的各种方法及其使用场景,并结合部分示例代码进行说明。 ### Java中截取字符串的方法 在Java编程语言中,字符串的处理是一项非常重要的技能,特别是在开发中...
JavaScript常用函数使用总结涵盖了多种在JavaScript编程中常用的方法,它们分别属于不同的类型,如String类型和Number类型。以下是对每个函数详细的说明和应用示例: 1. parseInt()函数 parseInt()是String类型的...
Java笔试题涵盖了许多核心概念,对于提升面试能力和深入理解Java编程至关重要。以下是对这些知识点的详细解释: 1. Java参数传递:Java采用传值方式进行参数传递。这意味着在方法调用时,传递的是变量的副本,而...
JavaScript 支持两种类型的注释:单行注释(`//`)和多行注释(`/* */`)。例如: ```javascript // 这是一个单行注释 /* 这是一个 多行注释 */ ``` ### 3. HTML 文档结构 HTML文档的基本结构如下: ```html <!...
在b/s开发中经常用到的javaScript技术整理 Posted on 2006-02-17 15:55 MeiYU 阅读(377) 评论(0) 编辑 收藏 一、验证类 1、数字验证内 1.1 整数 1.2 大于0的整数 (用于传来的ID的验证) 1.3 负整数的验证 1.4 ...
1. **更高的灵活性**:可以通过多个阶段来组合复杂的查询逻辑,实现更为精细的数据筛选和处理。 2. **更好的性能**:MongoDB 内部对 `aggregate` 管道进行了优化,尤其是在大数据量的情况下,能够更快地完成数据处理...
JavaScript 是一种轻量级的编程语言,常用于实现网页上的交互功能。下面我们将详细介绍一些最基本的 JavaScript 函数及其应用场景。 #### 二、文档对象模型(DOM)操作 1. **`document.write("")`**: 这个函数可以...
在Java中,我们可以使用`substring()`方法结合`getBytes()`来实现。但是,Java的字符串是Unicode的,`getBytes()`会根据指定的字符集编码字符串为字节数组。例如: ```java String str = "你好,世界"; int byte...
4. **字符串处理**:PHP提供了丰富的字符串操作函数,如`substr()`截取子串,`strpos()`查找子串位置,`str_replace()`替换子串,`explode()`和`implode()`分割和合并字符串。 5. **数组操作**:PHP支持索引数组和...
函数是PHP编程中的关键部分,比如字符串处理函数(str_replace、strpos、substr等)、数组操作函数(array_push、array_pop、count等)、文件系统函数(file_get_contents、file_put_contents、mkdir等)以及错误...
题目中提到的四组函数,选项D中的STR(3.14,3,1),DTOC(DATE()),SUBSTR("ABCD",3,1)返回值类型分别是字符串、字符串和字符,都是字符型数据,因此答案是D。这展示了对函数返回值类型的理解和数据类型的匹配原则。 2...
4. **字符串与数组操作**:介绍PHP中的字符串处理函数,如strlen、substr、strpos等,以及数组操作函数,如array、count、sort等。 5. **文件操作**:讲解如何在PHP中读取、写入、复制、删除和移动文件,以及如何...
在 Web 开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的异步更新,提供更好的用户体验。在这个案例中,我们将探讨如何使用 Ajax 实现一个简单的百度搜索栏功能,即当用户在输入框中键入...
下面代码超简单,不多说了,直接上代码。 //输入计数 //count:能輸入的數據總量 ... $(v).val($(v).val().substr(0, count)); valLength = count; } span.text("您已輸入" + valLength + "字元,還剩下" + (c
面向对象的思想方法已经非常流行了,在编程语言(例如java,js)中,都运用面向对象的编程思想。在XML中,就是要将网页也作为一个对象来操作和控制,我们可以建立自己的对象和模板。与对象进行交流,如何命令对象,...
7. **数组操作**:`count()`计算元素数量,`foreach`循环遍历数组,`array_push()`和`array_pop()`在数组末尾添加或删除元素。 8. **文件操作**:PHP可以读写文件,如`file_get_contents()`读取文件,`file_put_...
13. **PHP与前端交互**:通过AJAX(Asynchronous JavaScript and XML)技术,PHP可以与JavaScript配合,实现页面的异步更新。 14. **服务器配置**:PHP通常与Apache或Nginx等Web服务器配合,配置文件一般为php.ini...
在JavaScript编程语言中,字符串是不可变的数据类型,这意味着一旦创建了一个字符串,就不能更改它的内容。这个名为"strings-methods-practice-js-prac"的练习项目显然旨在帮助开发者熟悉JavaScript中处理字符串的...
它的语法吸收了C语言、Java和Perl的特点,易于学习,且功能强大,可以嵌入到HTML中使用。 1. **PHP安装与环境配置**:在开始学习PHP之前,你需要安装PHP运行环境,如XAMPP或WAMP,它们包含了Apache服务器、MySQL...