[转帖]Bash字符串处理(与Java对照) - 19.查找字符的位置_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4545 | 回复: 0   主题: [转帖]Bash字符串处理(与Java对照) - 19.查找字符的位置        下一篇 
fozhyn
注册用户
等级:上士
经验:317
发帖:101
精华:0
注册:2011-10-18
状态:离线
发送短消息息给fozhyn 加好友    发送短消息息给fozhyn 发消息
发表于: IP:您无权察看 2011-10-19 15:11:43 | [全部帖] [楼主帖] 楼主

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

Bash代码   北京联动北方科技有限公司


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 ~]#




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论