Bash字符串处理(与Java对照) - 19.查找字符的位置_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Bash字符串处理(与Java对照) - 19.查找字符的位置

Bash字符串处理(与Java对照) - 19.查找字符的位置

 2011/10/19 8:04:54  codingstandards  http://codingstandards.iteye.com  我要评论(0)
  • 摘要:Bash字符串处理(与Java对照)-19.查找字符的位置InJavaString.indexOf&String.lastIndexOfintindexOf(intch)返回指定字符在此字符串中第一次出现处的索引。intindexOf(intch,intfromIndex)从指定的索引开始搜索,返回在此字符串中第一次出现指定字符处的索引。intlastIndexOf(intch)返回最后一次出现的指定字符在此字符串中的索引。intlastIndexOf(intch
  • 标签:Bash 查找 Java 字符串

Bash字符串处理(与Java对照) - 19.查找字符的位置

In Java

String.indexOf & String.lastIndexOf

?int ??? indexOf(int ch)
????????? 返回指定字符在此字符串中第一次出现处的索引。
?int ??? indexOf(int ch, int fromIndex)
????????? 从指定的索引开始搜索,返回在此字符串中第一次出现指定字符处的索引。

?

int ??? lastIndexOf(int ch)
????????? 返回最后一次出现的指定字符在此字符串中的索引。
?int ??? lastIndexOf(int ch, int fromIndex)
????????? 从指定的索引处开始进行后向搜索,返回最后一次出现的指定字符在此字符串中的索引。

?

StringUtils.indexOf & StringUtils.indexOfAny & StringUtils.indexOfIgnoreCase & StringUtils.lastIndexOf

在 org.apache.commons.lang.StringUtils 中提供了很多查找字符索引的方法,包括正向和反向。

?

static int ??? indexOf(String str, char searchChar)
????????? Finds the first index within a String, handling null.
static int ??? indexOf(String str, char searchChar, int startPos)
????????? Finds the first index within a String from a start position, handling null.

static int ??? lastIndexOf(String str, char searchChar)
????????? Finds the last index within a String, handling null.
static int ??? lastIndexOf(String str, char searchChar, int startPos)
????????? Finds the last index within a String from a start position, handling null.

?

在 org.apache.commons.lang.StringUtils 中还提供了查找任意字符出现的位置的方法。
static int ??? indexOfAny(String str, char[] searchChars)
????????? Search a String to find the first index of any character in the given set of characters.
static int ??? indexOfAny(String str, String searchChars)
????????? Search a String to find the first index of any character in the given set of characters.
static int ??? indexOfAnyBut(String str, char[] searchChars)
????????? Search a String to find the first index of any character not in the given set of characters.
static int ??? indexOfAnyBut(String str, String searchChars)
????????? Search a String to find the first index of any character not in the given set of characters.

?

In Bash

使用遍历字符的方式来查找字符的位置

函数:strchr <str> <ch>

如果找到,打印字符的位置,从0开始计数,退出码为0;否则打印-1,退出码为1

strchr(){
    local i
    for ((i=0; i<${#1}; ++i))
    do
        if [ "${1:i:1}" == "$2" ]; then
            echo $i
            return 0
        fi
    done
    echo -1
    return 1
}

?

[root@web ~]# STR=123456789
[root@web ~]# CH=6
[root@web ~]# strchr "$STR" "$CH"
5
[root@web ~]# echo $?
0
[root@web ~]# CH=a
[root@web ~]# strchr "$STR" "$CH"
-1
[root@web ~]# echo $?
1
[root@web ~]#

?

用expr index来查找字符的位置

格式:expr index "$STR" "$CHARS"

在STR中查找CHARS中的任何字符(而不是子串),打印第一个位置。

注意:返回的下标是从1开始的,0表示没有找到。

不完全对应于Java的indexOf方法。倒是与C++ STL string的find_first_of相似。

?

man expr 写道 index STRING CHARS
?? index in STRING where any CHARS is found, or 0

?

[root@jfht ~]# STR="Hello World"
[root@jfht ~]# SUB="l"
[root@jfht ~]# expr index "$STR" "$SUB"
3

[root@jfht ~]# SUB="not found" ???? # 注意,expr index并不能用能查找子串的位置,而是该字符串中任何字符首次出现的位置
[root@jfht ~]# expr index "$STR" "$SUB"
5

?

用awk index来查找字符出现的位置

格式1:awk -v "STR=$STR" -v "CH=$CH" '{print index(STR,CH)}' <<<""

格式2:echo | awk -v "STR=$STR" -v "CH=$CH" '{print index(STR,CH)}'

因为awk默认会从标准输入读取数据,所以必须进行输入的重定向。

此方法不仅可以查询字符的出现位置,也可以查询子串的出现位置。但不能查找任意字符的出现位置。

注意:索引位置从1开始计数,0表示没有找到。

man awk 写道 index(s, t) Returns the index of the string t in the string s, or 0 if t is not present. (This
implies that character indices start at one.) ?

[root@web ~]# STR=123456789
[root@web ~]# CH=6

[root@web ~]# awk -v "STR=$STR" -v "CH=$CH" '{print index(STR,CH)}' <<<""
6
[root@web ~]# echo | awk -v "STR=$STR" -v "CH=$CH" '{print index(STR,CH)}'
6
[root@web ~]#

?

?

本文链接:http://codingstandards.iteye.com/blog/1198917? (转载请注明出处)

返回目录:Java程序员的Bash实用指南系列之字符串处理(目录)?

上节内容:Bash字符串处理(与Java对照) - 18.格式化字符串

下节内容:Bash字符串处理(与Java对照) - 20.查找子串的位置

?

?

发表评论
用户名: 匿名