`

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

阅读更多

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

In Java

String.startsWith

 boolean     startsWith(String prefix)
          测试此字符串是否以指定的前缀开始。


 boolean     startsWith(String prefix, int toffset)
          测试此字符串是否以指定前缀开始,该前缀以指定索引开始。相当于 this.substring(toffset).startsWith(prefix)

 

StringUtils.startsWith & StringUtils.startsWithIgnoreCase & StringUtils.startsWithAny

org.apache.commons.lang.StringUtils startsWith方法 写道
public static boolean startsWith(String str, String prefix)

Check if a String starts with a specified prefix.

nulls are handled without exceptions. Two null references are considered to be equal. The comparison is case sensitive.

StringUtils.startsWith(null, null) = true
StringUtils.startsWith(null, "abc") = false
StringUtils.startsWith("abcdef", null) = false
StringUtils.startsWith("abcdef", "abc") = true
StringUtils.startsWith("ABCDEF", "abc") = false


Parameters:
str - the String to check, may be null
prefix - the prefix to find, may be null
Returns:
true if the String starts with the prefix, case sensitive, or both null

 

org.apache.commons.lang.StringUtils startsWithIgnoreCase方法 写道
public static boolean startsWithIgnoreCase(String str, String prefix)

Case insensitive check if a String starts with a specified prefix.

nulls are handled without exceptions. Two null references are considered to be equal. The comparison is case insensitive.

StringUtils.startsWithIgnoreCase(null, null) = true
StringUtils.startsWithIgnoreCase(null, "abc") = false
StringUtils.startsWithIgnoreCase("abcdef", null) = false
StringUtils.startsWithIgnoreCase("abcdef", "abc") = true
StringUtils.startsWithIgnoreCase("ABCDEF", "abc") = true


Parameters:
str - the String to check, may be null
prefix - the prefix to find, may be null
Returns:
true if the String starts with the prefix, case insensitive, or both null

 

org.apache.commons.lang.StringUtils startsWithAny方法 写道
public static boolean startsWithAny(String string, String[] searchStrings)

Check if a String starts with any of an array of specified strings.

StringUtils.startsWithAny(null, null) = false
StringUtils.startsWithAny(null, new String[] {"abc"}) = false
StringUtils.startsWithAny("abcxyz", null) = false
StringUtils.startsWithAny("abcxyz", new String[] {""}) = false
StringUtils.startsWithAny("abcxyz", new String[] {"abc"}) = true
StringUtils.startsWithAny("abcxyz", new String[] {null, "xyz", "abc"}) = true


Parameters:
string - the String to check, may be null
searchStrings - the Strings to find, may be null or empty
Returns:
true if the String starts with any of the the prefixes, case insensitive, or both null
 

In Bash

使用[[ ]] 模式匹配来判断是否以别的字符串开头(推荐方式)

格式:[[ $STR == $PREFIX* ]]

 

[root@web ~]# STR=ISO9001
[root@web ~]# PREFIX=ISO
[root@web ~]# [[ $STR == $PREFIX* ]] && echo "starts"
starts
[root@web ~]# PREFIX="ISO 9"
[root@web ~]# [[ $STR == $PREFIX* ]] && echo "starts"
[root@web ~]# STR="Yes ISO9001"
[root@web ~]# PREFIX=ISO
[root@web ~]# [[ $STR == $PREFIX* ]] && echo "starts"
[root@web ~]#

 

使用[[ ]] 正则表达式匹配来判断是否以别的字符串开头

格式:[[ $STR =~ ^$PREFIX ]]

注意:必须加上^,否则所有包含该字符串的也会匹配,而不只是以该字符串开头的。

 

[root@web ~]# PREFIX=ISO
[root@web ~]# STR=ISO9001
[root@web ~]# [[ $STR =~ ^$PREFIX ]] && echo "starts"
starts
[root@web ~]# STR="Yes ISO9001"
[root@web ~]# [[ $STR =~ ^$PREFIX ]] && echo "starts"
[root@web ~]#

 

以截取子串判断相等的方式来判断是否以别的字符串开头

格式:N=${#PREFIX}; [ "${STR:0:N}" == "$PREFIX" ]

 

[root@web ~]# PREFIX=ISO
[root@web ~]# STR=ISO9001
[root@web ~]# [ "${STR:0:3}" == "$PREFIX" ] && echo "starts"
starts
[root@web ~]# N=${#PREFIX}
[root@web ~]# [ "${STR:0:N}" == "$PREFIX" ] && echo "starts"
starts
[root@web ~]# [ "${STR:0:$N}" == "$PREFIX" ] && echo "starts"
starts
[root@web ~]#

 

用case语句来判断是否以别的字符串开头

正确:case "$STR" in "$PREFIX"*) echo "starts"; esac

错误:case "$STR" in "$PREFIX*") echo "starts"; esac

注意*不能写在双引号里面,否则不灵。

 

[root@web ~]# PREFIX=ISO
[root@web ~]# STR=ISO9001
[root@web ~]# case "$STR" in "$PREFIX*") echo "starts"; esac
[root@web ~]# case "$STR" in "$PREFIX"*) echo "starts"; esac
starts
[root@web ~]#

 

 

用掐头法判断是否以别的字符串开头

格式:[ "${STR#$PREFIX}" != "$STR" ]

 

[root@web ~]# PREFIX=ISO
[root@web ~]# STR=ISO9001

[root@web ~]# echo "${STR#$PREFIX}"
9001
[root@web ~]# [ "${STR#$PREFIX}" != "$STR" ] && echo "starts with"
starts with
[root@web ~]#

 

 

其他的利用 grep, expr match, expr substr, cut 等的方法,因为都采用外部命令方式,有些杀鸡用牛刀了,此处不列出了。

 

 

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

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

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

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

 

 

3
2
分享到:
评论

相关推荐

    bash-3.1-MSYS-1.0.11-snapshot.tar

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

    openjdk-17.0.2(openjdk-17.0.2_macos-aarch64_bin.tar.gz)

    3. **文本块(Text Blocks)**:Java 13 引入的新语法特性,使得多行字符串的编写更加直观,减少了转义字符的困扰。 4. **记录类(Record Classes)**:Java 14 添加的记录类简化了创建不可变数据对象的过程,自动...

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

    修复redhat6 bash远程执行任意代码漏洞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`)和开发...

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

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

    mysql-connector-java-8.0.13.jar

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

    fontconfig-2.13.0-4.3.el7.x86_64.zip

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

    jdk-11.0.16.1-linux-x64-bin.tar

    标题中的"jdk-11.0.16.1-linux-x64-bin.tar"是一个针对Linux操作系统的64位Java Development Kit(JDK)的压缩文件,版本为11.0.16.1。这个文件是Oracle JDK的特定版本,用于在Linux环境下开发和运行Java应用程序。 ...

    BASH 中的字符串处理

    - `echo ${str/#pattern/replacement}`:如果字符串以pattern开头,替换它。 - `echo ${str/%pattern/replacement}`:如果字符串以pattern结尾,替换它。 七、字符串连接 使用`+`操作符可以连接两个字符串: ```...

    rlwrap-0.37.tar.gz

    总的来说,rlwrap提供了一种更高效、更易用的方式来与sqlplus交互,尤其是在处理字符编码问题时。对于需要频繁使用sqlplus的数据库管理员和开发者来说,rlwrap是一个非常实用的工具。通过正确配置和使用rlwrap,可以...

    arm-linux-gcc-4.4.3.tar.gz

    为了让系统知道新的交叉编译器的位置,需要在用户或系统的`~/.bashrc`或`/etc/bash.bashrc`文件中添加以下内容: ```bash export CC=/usr/local/arm-linux-gcc-4.4.3/bin/arm-linux-gcc export CXX=/usr/local/arm-...

    fonts-chinese-3.02-12.el5.noarch.rpm和fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm

    `fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm` 包含的是针对ISO 8859-2字符集的字体,这是一个广泛使用的西欧语言字符编码标准,涵盖了波兰语、匈牙利语等中欧语言的字符。75dpi(dots per inch)代表了字体的分辨率...

    最新版linux jdk-11.0.8_linux-x64_bin.tar.gz

    4. **文本块(Text Blocks)**:新语法特性,用于处理多行字符串,减少转义字符的使用,提高代码可读性。 5. **改进的垃圾收集器**:包括ZGC(Z Garbage Collector)和Shenandoah,提供了更低的暂停时间,适合大...

    Advanced Bash-Scripting Guide <>

    测试字符串是否为null 7-7. zmore 8-1. 最大公约数 8-2. 使用算术操作符 8-3. 使用&&和||进行混合状态的test 8-4. 数字常量的处理 9-1. $IFS 和空白 9-2. 时间输入 9-3. 再来一个时间输入 9-4. Timed read 9-5. 我...

    jdk-11.0.18-linux-aarch64-bin.tar.gz

    5. **文本块(Text Blocks)**:Java 11引入了文本块(多行字符串字面量)的预览特性,允许程序员方便地处理多行文本,减少字符串连接操作和转义字符的使用。 6. **其他语言特性和API增强**:包括对TLS协议的更新、...

    最新版linux jdk-11.0.15.1_linux-x64_bin.tar.gz

    - **字符串切片**:提供`String#lines()`方法,方便处理文本文件。 - **ZGC**:一种低延迟的垃圾收集器,适用于大内存应用。 **2. JDK 11.0.15.1更新** JDK 11.0.15.1是一个小版本更新,主要修复了已知的漏洞和优化...

    最新版linux jdk-11.0.16.1_linux-x64_bin.tar.gz

    5. **改进的字符串处理**:如`isBlank()`, `strip()`, `stripIndent()`, 和 `stripTrailing()`方法。 6. **反应式流**:支持非阻塞I/O,适应现代并发编程。 此外,JDK 11还包含对HTTP客户端的内置支持,以及对TLS...

    jdk-11.0.16.1_linux-x64_bin.tar.gz

    4. **文本块(Text Blocks,JEP 378)**:为Java源代码引入了多行字符串文字,使得处理多行字符串变得更加简单。 5. **强类型字符串连接(JEP 359)**:增强了字符串连接操作的性能,使得在连接字符串时无需创建...

    qt-embedded-linux-opensource-src-4.5.3.tar.gz 移植

    ### qt-embedded-linux-opensource-src-4.5.3.tar.gz 移植 #### 概述 ...通过这些步骤,我们不仅能够获得一个适合 ARM 架构的 Qt 开发环境,还能在此基础上进一步扩展和定制 Qt 功能以满足不同项目的需要。

Global site tag (gtag.js) - Google Analytics