"".indexOf()的作用,以及结果标识 1(不限于1,而是发现的字符的起始位,从0开始)、0、-1
在实际编程的过程中,总是无法避免和String类型的反参打交道,但是这个String类型的数据并不是中止,而是需要做进一步的转化比如转化为xml对象或者json类型的对象。
但是返回的String类型的字符串有时并不是我们预想的字符串,或许是网络故障,或者是我们的请求没有获取正确的响应而返回了一个表示错误信息的String类型的串。
在这种情况下,我们就需要先对结果做出判断。
先提出几个实例:
·String str1=“{I am ok:1234}”.indexOf("123");
str1=9;
·String str1=“1234}”.indexOf("123");
str1=0;
·String str2=“{I am ok:1234}”.indexOf("");
str1=0;
·String str3=“{I am ok:1234}”.indexOf("12345");
str1=-1;
上面的3个结果说明,对字符串使用indexOf()方法可以有3种使用效果
第一种是被比较的字符串具有比较的字符串,所得结果返回为 1或者0,这是返回的存在这个字符串的起始位置第0位开始,或者第1位开始出现这个字符串
第二种是和空字符串比较,返回的是0,如果使用空字符串和空字符串做比较,返回的还是0
第三种是和一个不存在的字符串做比较,返回的是-1
如果说,我们已经可以预知两种结果中的特殊标志位,就是返回的string中要么有 "right",要么就是"false",这样的字段,那可显然,可以直接让string的串和right来一个indexOf("right"),如果返回为0或者大于0的整数,说明返回的是正确的结果,否则,也就是等于 -1 时,就是错误的string串了,当然,使用表示"false"字段的比较也是可以的。
·IPv4的局限性:
1.地址空间的局限性:IP地址空间的危机由来已久,并正是升级到IPv6的主要动力。
2.安全性:IPv4在网络层没有安全性可言,安全性一直被认为是由网络层以上的层负责。
3.自动配置:对于IPv4节点的配置比较复杂,让很多普通用户无所适从。
4.NAT:破坏了Internet端到端的网络模型。
5.由于IPv4地址分配杂乱无章,没有层次性,网络设备需要维护庞大的路由表项。
6.IPv4包头过于复杂,使得网络节点处理的效率不高。
IPV6的好处:
1、超大的地址空间
2、全球可达性,不需要再用NAT
3、全球重新部署,有规划,易于实现聚合
4、能自动配置,实现即插即用
5、方便的进行重编址
6、包头简单,通过扩展包头技术可实现以后的新技术扩展 (基本包头 + n多个扩展包头)
ipv4 路由转发的时候,ip包会改变checksum(校验和) 和TTL(每经过一个路由器TTL值减一)
ipv6 只变TTL,没有校验和
CPU现在无法实现128位的转发。
最好只是64位的。
·Theoretical limit: 4.3 billion (十亿) 43亿
Practical limit : 250 million (百万) 2.5亿
Over 420 million Internet in Y2001
(less than 10% of the worldwide population)
没有广播,组播代替广播。所以没有ARP。
IPv4中的广播(broadcast)可以导致网络性能的下降甚至广播风暴(broadcast storm).在IPv6中,就不存在广播这一概念了,取而代之的是组播(multicast)和任意播(anycast),任意播也称为泛播.
IPV6在以太网中的协议ID值是0x86DD
<IPV6地址的表示方法>
·IPv4 点分十进制 32bit
IPv6 冒号分十六进制 128bit
0000:0000:0000:0000:0000:0000:0000:0000=>::
0000:0000:0000:0000:0000:0000:0000:0001=>0:0:0:0:0:0:0:1=>::1
2001:0000:0000:1234:0000:0000:0567:00ff=>2001::1234:0:0:567:ff 只能有一个::
fe80:0000:0000:0000:0000:0000:0000:0009=>fe80::9
URL的IPV6地址表示
为了区分IPV6地址中的冒号和端口号前的冒号,要把IPV6地址用[]括起来
www.example.net:8080/index.html
https:[2001:410:0:1:250:fcee:e450:33ab]:8443/abc.html
IPV6中掩码的表示:
在IPV6中掩码只能使用CIDR表示法
2001:410:0:1::45ff/128
2001:410::1/64
注意:在IPV6中没有广播地址和网络号保留地址
------------------------------------------------------------------------------------------
<IPV6的地址类型>
可分为三大类:
1、单播地址
2、组播地址
3、任意播地址
单播--Unicast : one to one
·单播地址用于一对一的连接
·IPv6单播地址有以下六种类型:
1-Aggregate Global Unicast Address 2xxx:xxxxx/3 - 3FFF: :FFFF
2001::/16 IPV6因特网地址
2002::/16 6to4过渡地址
2-Link Local Address FE80::/10 (前10位以FE80开头)
3-Site Local Address (Private) FEC0::/10
4-Unspecified Address 0:0:0:0:0:0:0:0/128 => :
某些查询方法中,如果没有查找到你想要的结果,就会返回-1,表示没有查找到。
例:
String
中的
indexOf
()
2,在做数组的遍历时,有一个小技巧,就是在遍历即将结束的时候,令index = -1,可以继续遍历。
最近有一个需求,从服务端请求数据拿到一个数组,塞到list里面后,在后面某个地方需要通过具体的Element去找到它在list中的index,很简单对不对,直接list.
indexOf
(e) 不就好了么?
奇怪的地方
Data 是数据实体Bean,比如存在两个属性,name和address
var data1 = Data("张三","北京朝阳区")
var data2 = Data("李四","北京海淀区")
var data3 = Data("王五","北京朝阳区")
dataList.
参数:value 要搜寻的字符串。
返回值:如果找到该字符串,则为 value 的从零开始的索引位置;如果未找到该字符串,则为 -1。 如果 value 为 System.
String
.Empty,则返回值为0。
语法:
IndexOf
(char value);
功能:报告指定 Unicode 字符在此字符串中的第一个匹配项的从零开始的索引。
参数:要查找的 Unicode 字符.
IndexOf
() 查找字串中指定字符或字串首次出现的位置,返首索引值,如: 代码如下: str1.
IndexOf
(“字”); //查找“字”在str1中的索引值(位置) str1.
IndexOf
(“字串”);//查找“字串”的第一个字符在str1中的索引值(位置) str1.
IndexOf
(“字”,start,end);//从str1第start+1个字符起,查找end个字符,查找“字”在字符串STR1中的位置[从第一个字符算起]注意:start+end不能大于str1的长度
indexof
参数为
string
,在字符串中寻找参数字符串第一次出现的位置并返回该位置。如
string
s=”0