`

Bash字符串处理(与Java对照) - 15.计算子串出现的次数

阅读更多

Bash字符串处理(与Java对照) - 15.计算子串出现的次数

In Java

StringUtils.countMatches

org.apache.commons.lang.StringUtils countMatches方法 写道
public static int countMatches(String str, String sub)

Counts how many times the substring appears in the larger String.

A null or empty ("") String input returns 0.

StringUtils.countMatches(null, *) = 0
StringUtils.countMatches("", *) = 0
StringUtils.countMatches("abba", null) = 0
StringUtils.countMatches("abba", "") = 0
StringUtils.countMatches("abba", "a") = 2
StringUtils.countMatches("abba", "ab") = 1
StringUtils.countMatches("abba", "xxx") = 0


Parameters:
str - the String to check, may be null
sub - the substring to count, may be null
Returns:
the number of occurrences, 0 if either String is null

 

countMatches的实现代码

(摘自 StringUtils)

public static int countMatches(String str, String sub) {
    if (isEmpty(str) || isEmpty(sub)) {
        return 0;
    }
    int count = 0;
    int idx = 0;
    while ((idx = str.indexOf(sub, idx)) != INDEX_NOT_FOUND) {
        count++;
        idx += sub.length();
    }
    return count;
}

public static final int INDEX_NOT_FOUND = -1;

public static boolean isEmpty(String str) {
    return str == null || str.length() == 0;
}
 

In Bash

子串出现的次数

格式:grep -o "$SUB" <<<"$STR" | wc -l

错误:grep -c -o "$SUB" <<<"$STR"    注:开始以为这个可以,经过检验之后不行,因为-c参数只会打印匹配的的行数。

man grep 写道
-o, --only-matching
     Show only the part of a matching line that matches PATTERN.

       -c, --count
              Suppress normal output; instead print a count of matching lines for  each  input  file.   With  the  -v,
              --invert-match option (see below), count non-matching lines.
 

[root@jfht ~]# x="This is a test"
[root@jfht ~]# grep -o "t" <<<"$x" | wc -l    
2
[root@jfht ~]# grep -o "T" <<<"$x" | wc -l
1
[root@jfht ~]# grep -o "[tT]" <<<"$x" | wc -l
3
[root@jfht ~]# grep -o "t|T" <<<"$x" | wc -l    
0
[root@jfht ~]# grep -o "t\|T" <<<"$x" | wc -l
3

 

字符出现的次数

格式:TMP=${STR//[^cC]}; ${#TMP}

意思是说将STR字符串中所有不是c和C的字符删除掉,保存到TMP中,那么得到TMP的长度就是c或C出现的次数

 

[root@jfht ~]# x="This is a test"    
[root@jfht ~]# y=${x//[^tT]}
[root@jfht ~]# echo $y
Ttt
[root@jfht ~]# echo ${#y}
3

 

 

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

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

上节内容:Bash字符串处理(与Java对照) - 14.判断是否包含另外的字符串(多达6种方法)

下节内容:Bash字符串处理(与Java对照) - 16.判断是否以另外的字符串开头

 

 

3
0
分享到:
评论
1 楼 superlittlefish 2011-10-08  
受教, 学习了.

相关推荐

    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-4.1.2-15.el6_5.1.x86_64.rpm

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

    修复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...

    bash-4.1.2-15.el6_5.2.i686.rpm

    网上有很多bash补丁下载,但都是x86_64架构的,针对i686的下载很少,bash-4.1.2-15.el6_5.2.src.rpm 也很难下载,希望上传的这个bash-4.1.2-15.el6_5.2.i686.rpm对你有用。

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

    离线安装包,测试可用

    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 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...

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

    rhel 6.4 64位 bash漏洞更新包

    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-debuginfo-3.2-33.el5_11.4.x86_64

    Bash-debuginfo包是Bash的主要软件包的补充,它包含了一些特殊的符号和元数据,这些信息对于开发人员和系统管理员来说非常有用,当他们需要诊断或调试与Bash相关的错误和问题时。 具体来说,调试信息包括了源代码...

    .git-completion.bash

    .git-completion.bash

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

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

    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补丁包.zip

    1、rhel 4.x 32位 bash-3.0-27.0.3.el4....bash-4.1.2-15.el6_5.2.x86_64.rpm bash-debuginfo-4.1.2-15.el6_5.2.x86_64.rpm bash-doc-4.1.2-15.el6_5.2.x86_64.rpm 8、rhel AS release 4 bash-3.0-27.0.1.el4.i386.rpm

    git-bash.exe

    git-bash.exe

    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 (如有依赖报错,请按照...

    bash-4.1.2-9.el6_2.i686.rpm

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

Global site tag (gtag.js) - Google Analytics