如果您对Java中String方法的函数指针感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Java中String方法的函数指针的详细内容,我们还将为您解答java中stri
如果您对Java中String方法的函数指针感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Java中String方法的函数指针的详细内容,我们还将为您解答java中string函数用法的相关问题,并且为您提供关于java java中subString、split、stringTokenizer三种截取字符串方法的性能比较、javascript – 对象中的函数指针、javascript中string方法如何使用、javascript中string方法有哪些的有价值信息。
本文目录一览:- Java中String方法的函数指针(java中string函数用法)
- java java中subString、split、stringTokenizer三种截取字符串方法的性能比较
- javascript – 对象中的函数指针
- javascript中string方法如何使用
- javascript中string方法有哪些
Java中String方法的函数指针(java中string函数用法)
我对lambda不太了解。
String s = "Hello World"; Function<Integer, String> f = s::substring;s = null;System.out.println(f.apply(5));
如果,为什么该f.apply
方法仍然有效s = null
。毕竟,该String
对象应该由GC删除,因为没有指向该对象的指针。
还有一件事,为什么我在这里不需要返回声明?
Function<Integer, String> f = t -> t + "";
答案1
小编典典在JLS,第15.13.3描述方法引用的运行评估。
方法参考表达式评估的时间比lambda表达式(第15.27.4节)更复杂。
当方法引用表达式的::分隔符之前具有表达式(而不是类型)时,将立即对该子表达式求值。该 评价的结果被存储,直到相对应的功能的接口类型的方法被调用;
此时,结果将用作调用的目标参考。这意味着::分隔符之前的表达式仅在程序遇到方法引用表达式时才被评估,并且不会在后续对功能接口类型的调用时被重新评估。
(加粗强调我的)
基本上s
,将对方法引用的引用存储为以后执行。在这里,字符串"HelloWorld"
被保存以供以后执行方法引用。因此,即使在方法引用的声明之后设置s
为null
,但在执行之前设置为Function
,它仍将使用字符串"HelloWorld"
。
设置为null
不能保证垃圾收集器会收集它,也不能保证立即收集垃圾。
另外,在这里,方法参考中仍然有一个参考,因此这里根本不会收集垃圾。
最后,lambda表达式主体具有2种形式:一个表达式和一个语句块(可能带有return语句)。用
Function<Integer, String> f = t -> t + "";
那是一种表达。等效的block语句为:
Function<Integer, String> f = t -> { return t + "";};
java java中subString、split、stringTokenizer三种截取字符串方法的性能比较
最近在阅读java.lang下的源码,读到String时,突然想起面试的时候曾经被人问过:都知道在大数据量情况下,使用String的split截取字符串效率很低,有想过用其他的方法替代吗?用什么替代?我当时的回答很斩钉截铁:没有。
google了一下,发现有2中替代方法,于是在这里我将对这三种方式进行测试。
测试的软件环境为:Windows XP、eclipse、JDK1.6。
测试用例使用类ip形式的字符串,即3位一组,使用”.”间隔。数据分别使用:5组、10组、100组、1000组、10000组、100000组。
实现
闲话不说,先上代码:
package test.java.lang.ref;
import java.util.Random;
import java.util.StringTokenizer;
/**
* String测试类
* @author xiaori.Liu
*
*/
public class StringTest {
public static void main(String args[]){
String orginStr = getOriginStr(10);
//////////////String.splic()表现//////////////////////////////////////////////
System.out.println("使用String.splic()的切分字符串");
long st1 = System.nanoTime();
String [] result = orginStr.split("\\.");
System.out.println("String.splic()截取字符串用时:" + (System.nanoTime()-st1));
System.out.println("String.splic()截取字符串结果个数:" + result.length);
System.out.println();
//////////////StringTokenizer表现//////////////////////////////////////////////
System.out.println("使用StringTokenizer的切分字符串");
long st3 = System.nanoTime();
StringTokenizer token=new StringTokenizer(orginStr,".");
System.out.println("StringTokenizer截取字符串用时:"+(System.nanoTime()-st3));
System.out.println("StringTokenizer截取字符串结果个数:" + token.countTokens());
System.out.println();
////////////////////String.substring()表现//////////////////////////////////////////
long st5 = System.nanoTime();
int len = orginStr.lastIndexOf(".");
System.out.println("使用String.substring()切分字符串");
int k=0,count=0;
for (int i = 0; i <= len; i++) {
if(orginStr.substring(i, i+1).equals(".")){
if(count==0){
orginStr.substring(0, i);
}else{
orginStr.substring(k+1, i);
if(i == len){
orginStr.substring(len+1, orginStr.length());
}
}
k=i;count++;
}
}
System.out.println("String.substring()截取字符串用时"+(System.nanoTime()-st5));
System.out.println("String.substring()截取字符串结果个数:" + (count + 1));
}
/**
* 构造目标字符串
* eg:10.123.12.154.154
* @param len 目标字符串组数(每组由3个随机数组成)
* @return
*/
private static String getOriginStr(int len){
StringBuffer sb = new StringBuffer();
StringBuffer result = new StringBuffer();
Random random = new Random();
for(int i = 0; i < len; i++){
sb.append(random.nextInt(9)).append(random.nextInt(9)).append(random.nextInt(9));
result.append(sb.toString());
sb.delete(0, sb.length());
if(i != len-1)
result.append(".");
}
return result.toString();
}
}
改变目标数据长度修改getOriginStr的len参数即可。
5组测试数据结果如下图:
下面这张图对比了下,split耗时为substring和StringTokenizer耗时的倍数:
好吧,我又花了点儿时间,做了几张图表来分析这3中方式的性能。
首先来一张柱状图对比一下这5组数据截取所花费的时间:
从上图可以看出StringTokenizer的性能实在是太好了(对比另两种),几乎在图表中看不见它的身影。遥遥领先。substring花费的时间始终比split要少,但是耗时也在随着数据量的增加而增加。
下面3张折线图可以很明显看出split、substring、StringTokenizer3中实现随着数据量增加,耗时的趋势。
split是变化最大的,也就是数据量越大,截取所需要的时间增长越快。
substring则比split要平稳一点点,但是也在增长。
StringTokenizer则是表现最优秀的,基本上平稳,始终保持在5000ns一下。
结论
最终,StringTokenizer在截取字符串中效率最高,不论数据量大小,几乎持平。substring则要次之,数据量增加耗时也要随之增加。split则是表现最差劲的。
究其原因,split的实现方式是采用正则表达式实现,所以其性能会比较低。至于正则表达式为何低,还未去验证。split源码如下:
public String[] split(String regex, int limit) {
return Pattern.compile(regex).split(this, limit);
}
转自:http://www.congmo.net/blog/2012/02/13/1/
javascript – 对象中的函数指针
例:
var myFuncPtr = function(){alert("Done");}; function myFunc(o){ // do something with passed object // then call the function pointed at in the passed object } myFunc( {foo:"bar",onDone: myFuncPtr} );
我确信那里有一位专家可以指导我朝着正确的方向前进.我是以错误的方式来做这件事的.如果有快速解决方案,则首选.
这是实际的代码:
$(document).ready(function() { imageCropper({ id:"imageBox",editWidth:400,cropWidth:0,maxFileSize:3000000,croppedId:"croppedBox",onCrop:whenImageCropped }); }); function whenImageCropped(o) { alert("done"); } function imageCropper(options) { divId = options.id; croppedDivId = (options.croppedId)?options.croppedId:divId+"_croppedPic"; $("#"+divId).load("/modules/imageCropper.asp",options,function(){ /* if i remove this bit,then no probs */ $("#"+divId+"_imgToCrop").Jcrop({ },function(){jcrop_api = this;} ); /* end of - if i remove this bit,then no probs */ }); }
解决方法
I want one of the properties of passed object to be a function pointer. But the function is executed which I don’t want to happen.
这听起来不是传递对函数的引用,而是执行函数并传递返回值.
也许在您的原始代码中
myFunc( {foo:"bar",onDone: myFuncPtr()} );
它调用myFuncPtr并将返回值赋给onDone.
问题中的代码很好,只需在myFunc中调用o.onDone()即可.
如前所述,JavaScript中没有指针,它比这简单得多.函数只是数据类型,如字符串,数字,数组等,它们恰好是可调用的.
javascript中string方法如何使用
javascript中string方法的使用:1、string对象的length属性声明了该字符串中的字符数;2、string类定义了大量操作字符串的方法。
本教程操作环境:windows7系统、javascript1.8.5版,DELL G3电脑。
javascript中string方法的使用:
String 对象描述
字符串是 JavaScript 的一种基本的数据类型。
立即学习“Java免费学习笔记(深入)”;
String 对象的 length 属性声明了该字符串中的字符数。
String 类定义了大量操作字符串的方法,例如从字符串中提取字符或子串,或者检索字符或子串。
需要注意的是,JavaScript 的字符串是不可变的(immutable),String 类定义的方法都不能改变字符串的内容。像 String.toUpperCase() 这样的方法,返回的是全新的字符串,而不是修改原始字符串。
在较早的 Netscape 代码基的 JavaScript 实现中(例如 Firefox 实现中),字符串的行为就像只读的字符数组。例如,从字符串 s 中提取第三个字符,可以用 s[2] 代替更加标准的 s.charAt(2)。此外,对字符串应用 for/in 循环时,它将枚举字符串中每个字符的数组下标(但要注意,ECMAScript 标准规定,不能枚举 length 属性)。因为字符串的数组行为不标准,所以应该避免使用它。
String 对象
String 对象用于处理文本(字符串)。
创建 String 对象的语法:
new String(s); String(s);
参数
参数 s 是要存储在 String 对象中或转换成原始字符串的值。
返回值
当 String() 和运算符 new 一起作为构造函数使用时,它返回一个新创建的 String 对象,存放的是字符串 s 或 s 的字符串表示。
当不用 new 运算符调用 String() 时,它只把 s 转换成原始的字符串,并返回转换后的值。
相关免费学习推荐:javascript学习教程
以上就是javascript中string方法如何使用的详细内容,更多请关注php中文网其它相关文章!
javascript中string方法有哪些
string方法有:charat()、indexof()、match()、repeat()、replace()、search()、slice()、split()、substr()、trim()、valueof()、tostring()等等。
本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。
JavaScript String 对象
JavaScript 字符串用于存储和处理文本。
通常, JavaScript 字符串是原始值,可以使用字符创建: var firstName = "John"
立即学习“Java免费学习笔记(深入)”;
但我们也可以使用 new 关键字将字符串定义为一个对象: var firstName = new String("John")
示例:
var x = "John"; var y = new String("John"); typeof x // 返回 String typeof y // 返回 Object
String 对象用于处理文本(字符串)。
String 对象的方法
方法 | 描述 |
---|---|
charAt() | 返回在指定位置的字符。 |
charCodeAt() | 返回在指定的位置的字符的 Unicode 编码。 |
concat() | 连接两个或更多字符串,并返回新的字符串。 |
fromCharCode() | 将 Unicode 编码转为字符。 |
indexOf() | 返回某个指定的字符串值在字符串中首次出现的位置。 |
includes() | 查找字符串中是否包含指定的子字符串。 |
lastIndexOf() | 从后向前搜索字符串,并从起始位置(0)开始计算返回字符串最后出现的位置。 |
match() | 查找找到一个或多个正则表达式的匹配。 |
repeat() | 复制字符串指定次数,并将它们连接在一起返回。 |
replace() | 在字符串中查找匹配的子串, 并替换与正则表达式匹配的子串。 |
search() | 查找与正则表达式相匹配的值。 |
slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分。 |
split() | 把字符串分割为字符串数组。 |
startsWith() | 查看字符串是否以指定的子字符串开头。 |
substr() | 从起始索引号提取字符串中指定数目的字符。 |
substring() | 提取字符串中两个指定的索引号之间的字符。 |
toLowerCase() | 把字符串转换为小写。 |
toUpperCase() | 把字符串转换为大写。 |
trim() | 去除字符串两边的空白 |
toLocaleLowerCase() | 根据本地主机的语言环境把字符串转换为小写。 |
toLocaleUpperCase() | 根据本地主机的语言环境把字符串转换为大写。 |
valueOf() | 返回某个字符串对象的原始值。 |
toString() | 返回一个字符串。 |
【推荐学习:javascript高级教程】
以上就是javascript中string方法有哪些的详细内容,更多请关注php中文网其它相关文章!
关于Java中String方法的函数指针和java中string函数用法的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于java java中subString、split、stringTokenizer三种截取字符串方法的性能比较、javascript – 对象中的函数指针、javascript中string方法如何使用、javascript中string方法有哪些等相关知识的信息别忘了在本站进行查找喔。
本文标签: