1958 - LISP

1959 - COBOL

1964 - BASIC

php的substring追本溯源substr与substring汗青漫话 PHP

1970 - Pascal

1967-1978:确立了根本范式

1972 -

C措辞

1975 - Scheme

1978 - SQL (起初只是一种查询措辞,扩充之后也具备了程序构造)

1980年代:增强、模块、性能

1983 -

C++ (就像有类别的C)

1988 - Tcl

1990年代:互联网时期

1991 -

Python

1991 - Visual Basic

1993 -

Ruby

1995 -

Java

1995 - Delphi (Object Pascal)

1995 -

JavaScript

1995 -

PHP

2009 -

Go

2014 -

Swift (编程措辞)

1.1 在C++中首次涌现substr()

在c措辞中,并没有涌现substr或者substring方法。
然而在1983,substr()方法已经涌如今C++措辞中了。
然而这时候还没有涌现substring, 以是可以见得:

substr是stustring的老大哥

string substr (size_t pos = 0, size_t len = npos) const;

从C++的方法定义中可以看到,

substr的参数是开始下标,以及字符串长度。

std::string str=\公众We think in generalities, but we live in details.\公众; std::string str2 = str.substr (3,5); // \"大众think\"大众

1.2 在Java中首次涌现substring()

间隔substr()方法涌现已经有了将近十年之隔,此间呈现一批后起之秀,如: Python, Ruby, VB之类,然而他们之中并没有stustring的基因,在Java的String类中,我们看到两个方法。
从这两个方法之中我们可以看到:substring方法基本原型的参数是开始和结束的下标。

String substring(int beginIndex) // 返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex)// 返回一个新字符串,它是此字符串的一个子字符串。

1.3 JavaScript的历史继续

1995年,网景公司招募了Brendan Eich,目的是将Scheme编程措辞嵌入到Netscape Navigator中。
在开始之前,Netscape Communications与Sun Microsystems公司互助,在Netscape Navigator中引入了更多的静态编程措辞Java,以便与微软竞争用户采取Web技能和平台。
网景公司决定,他们想创建的脚本措辞将补充Java,并且该当有一个类似的语法,打消采取Perl,Python,TCL或Scheme等其他措辞。
为了守卫对竞争性提案的JavaScript的想法,公司须要一个原型。
1995年5月,Eich在10天内写完。

上帝用七天韶光创造万物, Brendan Eich用10天韶光创造了一门措辞。
或许用创造并不得当,由于JavaScript是站在了Perl,Python,TCL或Scheme等其他巨人的肩膀上而产生的。

JavaScript并不像C那样出身名门,在贝尔实验室精心打造,但是JavaScript在今后的

自然选择

中,并没有因此冷落,反而借助于C,C++, Java, Perl,Python,TCL, Scheme精良基因,进化出更加强大强大的生命力。

因此可以想象,在10天之内,当Brendan Eich写到String的substr和substring方法时,或许他并没困惑着两个方法的参数该当如何设置,

由于在C++和Java的实现中,已经有了类似的定义。

如果你理解历史,你就不会困惑现在。

2 以是,substr和substring究竟有什么不同?

如下图所示:substr和substring都接管两个参数,他们的第一个参数的含义是相同的,

不同的是第二个参数。
substr的第二个参数是到达结束点的间隔,substring是结束的位置。