GVKun编程网logo

Java中String方法的函数指针(java中string函数用法)

20

如果您对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中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"被保存以供以后执行方法引用。因此,即使在方法引用的声明之后设置snull,但在执行之前设置为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 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 – 对象中的函数指针

javascript – 对象中的函数指针

我有一个 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方法如何使用

javascript中string方法的使用:1、string对象的length属性声明了该字符串中的字符数;2、string类定义了大量操作字符串的方法。

javascript中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方法有哪些

javascript中string方法有哪些

string方法有:charat()、indexof()、match()、repeat()、replace()、search()、slice()、split()、substr()、trim()、valueof()、tostring()等等。

javascript中string方法有哪些

本教程操作环境: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方法有哪些等相关知识的信息别忘了在本站进行查找喔。

本文标签: