?int ??? indexOf(String str)
????????? 返回第一次出现的指定子字符串在此字符串中的索引。
?int ??? indexOf(String str, int fromIndex)
????????? 从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
?
?int ??? lastIndexOf(String str)
????????? 返回在此字符串中最右边出现的指定子字符串的索引。
?int ??? lastIndexOf(String str, int fromIndex)
????????? 从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。
?
static int ??? indexOf(String str, String searchStr)
????????? Finds the first index within a String, handling null.
static int ??? indexOf(String str, String searchStr, int startPos)
????????? Finds the first index within a String, handling null.
static int ??? indexOfAny(String str, String[] searchStrs)
????????? Find the first index of any of a set of potential substrings.
static int ??? indexOfIgnoreCase(String str, String searchStr)
????????? Case in-sensitive find of the first index within a String.
static int ??? indexOfIgnoreCase(String str, String searchStr, int startPos)
????????? Case in-sensitive find of the first index within a String from the specified position.
static int ??? lastIndexOf(String str, String searchStr)
????????? Finds the last index within a String, handling null.
static int ??? lastIndexOf(String str, String searchStr, int startPos)
????????? Finds the first index within a String, handling null.
static int ??? lastIndexOfAny(String str, String[] searchStrs)
????????? Find the latest index of any of a set of potential substrings.
static int ??? lastIndexOfIgnoreCase(String str, String searchStr)
????????? Case in-sensitive find of the last index within a String.
static int ??? lastIndexOfIgnoreCase(String str, String searchStr, int startPos)
????????? Case in-sensitive find of the last index within a String from the specified position.
static int ??? lastOrdinalIndexOf(String str, String searchStr, int ordinal)
????????? Finds the n-th last index within a String, handling null.
static int ??? ordinalIndexOf(String str, String searchStr, int ordinal)
????????? Finds the n-th index within a String, handling null.
?
函数:strstr <str> <sub>
如果找到,打印位置,从0开始计数,退出码为0;否则,打印-1,退出码为1
strstr(){ declare -i i n2=${#2} n1=${#1}-n2 #echo $i $n1 $n2 for ((i=0; i<n1; ++i)){ if [ "${1:i:n2}" == "$2" ]; then echo $i return 0 fi } echo -1 return 1 }
?
[root@web ~]# STR=123456789
[root@web ~]# SUB=567
[root@web ~]# strstr "$STR" "$SUB"
4
[root@web ~]#
?
索引位置从1开始计数,0表示没有找到。
格式:awk -v "STR=$STR" -v "SUB=$SUB" '{print index(STR,SUB)}' <<<""
格式:echo | awk -v "STR=$STR" -v "SUB=$SUB" '{print index(STR,SUB)}'
?
[root@web ~]# STR=123456789
[root@web ~]# SUB=456
[root@web ~]# awk -v "STR=$STR" -v "SUB=$SUB" '{print index(STR,SUB)}' <<<""
4
[root@web ~]# echo | awk -v "STR=$STR" -v "SUB=$SUB" '{print index(STR,SUB)}'
4
[root@web ~]#
?
注意:expr index不能用来查找子串的位置。
格式1:expr "$STR" : ".*$SUB" - length "$SUB"
格式2:expr match "$STR" ".*$SUB" - length "$SUB"
如果STR包含SUB串,返回最后一次出现的位置(从1开始算)。因为正则表达式采用贪婪匹配方式,所以相当于lastIndexOf。如果没有找到,打印<=0的值。
?
[root@jfht ~]# STR="Hello World"
[root@jfht ~]# SUB=or
[root@jfht ~]# expr "$STR" : ".*$SUB"
9
[root@jfht ~]# expr "$STR" : ".*$SUB" - length "$SUB"
7
[root@jfht ~]# expr match "$STR" ".*$SUB" - length "$SUB"?
7
[root@jfht ~]# SUB=xx
[root@jfht ~]# expr "$STR" : ".*$SUB" - length "$SUB"
-2
[root@jfht ~]# expr match "$STR" ".*$SUB" - length "$SUB"
-2
[root@jfht ~]# SUB=o
[root@jfht ~]# expr "$STR" : ".*$SUB" - length "$SUB"???
7
[root@jfht ~]# expr match "$STR" ".*$SUB" - length "$SUB"
7
?
?
本文链接:http://codingstandards.iteye.com/blog/1199992 ? (转载请注明出处)
返回目录:Java程序员的Bash实用指南系列之字符串处理(目录)?
上节内容:Bash字符串处理(与Java对照) - 19.查找字符的位置
下节内容:Bash字符串处理(与Java对照) - 21.字符串(正则)匹配
?
?
?