`

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

阅读更多

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

In Java

String.indexOf

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

 

 int     lastIndexOf(String str)
          返回在此字符串中最右边出现的指定子字符串的索引。
 int     lastIndexOf(String str, int fromIndex)
          从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。

 

StringUtils.indexOf & StringUtils.lastIndexOf

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.

 

In Bash

使用遍历字符串的方法来查找子串的位置

函数: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 ~]#

 

使用awk index来查找子串的位置

索引位置从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 match来查找子串的最后出现位置

注意: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.字符串(正则)匹配

 

 

 

4
2
分享到:
评论

相关推荐

    mysql-connector-java-5.1.40.tar.gz

    MySQL Connector/J是MySQL数据库与Java应用程序之间的桥梁,它是一个实现了JDBC(Java Database Connectivity)标准的MySQL驱动程序。"mysql-connector-java-5.1.40.tar.gz" 是这个驱动程序的一个特定版本,版本号为...

    bash-3.1-MSYS-1.0.11-snapshot.tar

    bash-3.1-MSYS-1.0.11-snapshot.tar.bz2 ffmpeg 安装用包!

    bash-completion-2.1-6.el7.noarch.rpm

    在centos6或rhel6 操作系统安装bash-completion-2.1-6.el7.noarch.rpm后,重启即生效

    bash-completion-2.1-8.el7.noarch (1).rpm

    离线安装包,测试可用

    修复bash漏洞的bash-4.4.tar.gz源码包

    #tar zxvf bash-4.4.tar.gz #cd bash-4.4 #./configure (如果centos7编译失败,请先安装#yum install gcc) #make #make install 添加环境变量 #echo‘ export PATH=/usr/local/bin:$PATH‘ &gt;&gt;/etc/profile #source...

    .git-completion.bash

    .git-completion.bash

    centos安装jdk1.8时出现没有/lib/ld-linux.so.2:这个文件的原因分析

    -bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...

    libaio-devel-0.3.106(i386 x86_64)

    ```bash rpm -ivh libaio-devel-0.3.106-3.2.i386.rpm ``` 而对于 x86_64 系统,则是: ```bash rpm -ivh libaio-devel-0.3.106-3.2.x86_64.rpm ``` 安装完成后,libaio-devel 提供的头文件(如 `libaio.h`)和开发...

    apache-tomcat-8.5.55.tar.gz

    Apache Tomcat是一款开源的Java Servlet容器,用于部署和运行Java Web应用程序。在Linux系统中安装`apache-tomcat-8.5.55.tar.gz`文件的过程涉及多个步骤,包括下载、解压、配置和启动服务。以下是详细的安装和配置...

    bash-completion-1.3-7.el6.noarch.rpm

    centos6的yum源里面没有bash-completion的包,需要单独下载安装。centos7的yum源里面已包含此安装包,可以通过yum直接安装。 **安装步骤** 1、rpm -ivh bash-completion-1.3-7.el6.noarch.rpm (如有依赖报错,请按照...

    git-bash.exe

    git-bash.exe

    fontconfig-2.13.0-4.3.el7.x86_64.zip

    在Linux系统中,字体管理是实现正确显示各种字符集,包括中文字符,的关键部分。`fontconfig`是一个开源的字体配置库,它负责管理和查找系统中的字体,为应用程序提供统一的接口来处理字体问题。在没有互联网连接...

    mysql-connector-java-8.0.13.jar

    MySQL Connector/J 8.0.13 是MySQL数据库与Java应用程序之间的重要桥梁,它是Oracle官方提供的用于Java平台的MySQL驱动程序。这个jar包允许开发者在Java应用中执行SQL语句,进行数据的读取、写入和管理MySQL数据库。...

    Java-JDK-11.0.8(Windows &amp;amp; Mac os) 下载

    5. **文本块(Text Blocks)**:预览特性,允许在代码中方便地插入多行字符串,减少转义字符的使用。 在下载和安装Java JDK 11.0.8之后,开发者可以使用`javac`编译Java源代码,生成字节码(`.class`文件)。通过`...

    bash-4.1.2-15.el6_5.1.x86_64.rpm

    修复redhat6 bash远程执行任意代码漏洞CVE-2014-6271

    bash-4.1.2-9.el6_2.i686.rpm

    bash-4.1.2-9.el6_2.i686.rpm是centos工具类。

    linux bash远程执行代码漏洞的补丁

    redhat bash漏洞补丁包含文件:bash-4.1.2-15.el6_5.2.i686.rpmbash-4.1.2-15.el6_5.2.x86_64.rpmbash-3.0-27.el4.i386.rpmbash-3.0-27.el4.x86_64.rpmbash-3.2-33.el5_11.4.i386.r... redhat bash漏洞补丁 包含文件...

    bash-3.2-33.el5.1.x86_64.rpm

    修复bash远程执行漏洞,支持redhat linux 64位操作系统 CVE-2014-6271

    jdk-11.0.16.1-linux-x64-bin.tar

    然后将解压后的目录移动到一个合适的位置,如`/usr/lib/jvm`,并创建符号链接以设置系统默认的Java版本: ```bash sudo mv jdk-11.0.16.1 /usr/lib/jvm/ sudo update-alternatives --install /usr/bin/java java /...

    bash-4.2.46-35.el7_9.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

Global site tag (gtag.js) - Google Analytics