`

Bash字符串处理(与Java对照) - 8.计算字符串长度

阅读更多

Bash字符串处理(与Java对照) - 8.计算字符串长度

In Java

取字符数量

一个汉字算1个字符。

int len = s.length();

 

JavaDoc class String 写道
public int length()

Returns the length of this string. The length is equal to the number of Unicode code units in the string.

Specified by:
length in interface CharSequence

Returns:
the length of the sequence of characters represented by this object.

 

取字节数量

一个汉字算几个字节,取决于编码方式。

int numOfBytes = s.getBytes().length;

 

JavaDoc class String 写道
byte[] getBytes()
Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.
byte[] getBytes(Charset charset)
Encodes this String into a sequence of bytes using the given charset, storing the result into a new byte array.
byte[] getBytes(String charsetName)
Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array.
 

In Bash

取变量STR的长度(推荐方式)

格式:${#STR}

 

[root@jfht ~]# STR="Hello World"
[root@jfht ~]# echo ${#STR}
11

 

使用expr length命令取字符串长度

用expr命令,也可以取到字符串长度,但都没有上面的高效,因为上面的方式是Bash内置的方式,而expr命令是外部命令。

格式:expr length $STR

man expr 写道
length STRING
   length of STRING

 

使用expr match命令取字符串长度

格式1:expr "$STR" : ".*"

格式2:expr match "$STR" ".*"

man expr 写道
STRING : REGEXP
    anchored pattern match of REGEXP in STRING
match STRING REGEXP
    same as STRING : REGEXP
 

 

[root@jfht ~]# STR="Hello World"
[root@jfht ~]# expr length $STR
expr: 语法错误

因为STR中包含空白,造成了问题,要加上双引号。
[root@jfht ~]# expr length "$STR"
11

[root@jfht ~]# expr "$STR" : ".*"
11

[root@jfht ~]# expr match "$STR" ".*"
11

 

用wc命令取字符串长度

使用wc命令也可以实现字符串长度计算。

格式1:wc -c <<<"$STR"

比实际的字节数多1,会多输出一个换行,等同于 echo "$STR" | wc -c 而不是下面这个

格式2:echo -n "$STR" | wc -c

上面是计算字节数,如果是中文的话,每个中文为2个字节(当LANG=zh_CN.GB18030)。

格式3:wc -m <<<"$STR"

比实际的字符数多1,会多输出一个换行,等同于 echo "$STR" | wc -m 而不是下面这个

格式4:echo -n "$STR" | wc -m

上面是计算字符数,与${#STR}相同,每个汉字是按1个字符计算。

man wc 写道
-c, --bytes
    print the byte counts

-m, --chars
    print the character counts
 

[root@jfht ~]# STR=123456789

[root@jfht ~]# echo ${#STR}
9
[root@jfht ~]# wc -c <<<"$STR "
10

[root@jfht ~]# echo -n "$STR" | wc -c
9
[root@jfht ~]# wc -m <<<"$STR"
10

[root@jfht ~]# echo -n "$STR" | wc -m
9
[root@jfht ~]# STR=今年是2011年

[root@jfht ~]# echo ${#STR}
8
[root@jfht ~]# wc -c <<<"$STR" 
13

[root@jfht ~]# echo -n "$STR" | wc -c
12
[root@jfht ~]# wc -m <<<"$STR"
9

[root@jfht ~]# echo -n "$STR" | wc -m
8

[root@jfht ~]# STR="Hello World"

[root@jfht ~]# echo ${#STR}
11
[root@jfht ~]# wc -c <<<"$STR"
12

[root@jfht ~]# echo -n "$STR" | wc -c
11
[root@jfht ~]# wc -m <<<"$STR"
12

[root@jfht ~]# echo -n "$STR" | wc -m
11

 

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

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

上节内容:Bash字符串处理(与Java对照) - 7.字符串与默认值

下节内容:Bash字符串处理(与Java对照) - 9.获取字符串指定位置的字符、遍历字符串中的字符

 

 

4
1
分享到:
评论

相关推荐

    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 安装用包!

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

    在Mac上,安装完成后通常需要手动配置环境变量,通过修改"~/.bash_profile"或"~/.zshrc"文件,添加类似"export JAVA_HOME=/path/to/jdk11.0.8"的语句,确保系统可以找到Java命令。 Java 11作为长期支持(LTS)版本...

    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`)和开发...

    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

    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

    4. **动态类型字面量**:允许在字符串模板中使用`#{}`,使得表达式计算更为直观。 5. **文本块(Text Blocks)**:改进了多行字符串的表示,减少了转义字符的使用。 6. **改进的JShell(Java REPL)**:增强了交互式...

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

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

    tftp-server-0.42-3.1.i386.rpm.

    《TFTP服务器在RHEL5系统中的应用与配置详解》 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种轻量级的文件传输协议,常用于设备初始化、固件更新、网络诊断等场景。在RHEL5(Red Hat Enterprise...

    rlwrap-0.37.tar.gz

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

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

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

    apache-tomcat-7.0.70.tar.gz

    尽管Tomcat不是完整的Java EE应用服务器,但它与Java EE的其他组件(如EJB)可以通过与其他服务器(如JBoss或Glassfish)集成来支持。 **Linux系统**: Linux是一种自由和开放源代码的操作系统,广泛应用于服务器...

    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

    同时,对于需要处理中欧语言的环境,ISO 8859-2字体的提供则至关重要,因为它包含了那些区域的特殊字符,使得文本可以正确地被识别和打印。 总的来说,这两个rpm包提供了必要的字体资源,增强了CentOS系统对中文和...

    jdk-8u121-linux-x64.tar.gz

    Java开发工具包(Java Development Kit,简称JDK)是Java编程语言的核心组件,它提供了编译、调试和运行Java应用程序所需的所有工具。标题中的"jdk-8u121-linux-x64.tar.gz"是一个针对64位Linux系统的JDK 8更新121...

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

    rhel 6.4 64位 bash漏洞更新包

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

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

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

    #### 环境准备与工具介绍 在进行 Qt 移植之前,需要准备以下工具和环境: 1. **ARM-Linux-GCC**:这是一个交叉编译器,用于编译目标平台为 ARM 架构的代码。文中提到的版本为 4.0.1。 2. **Qt X11**:这是用于桌面...

Global site tag (gtag.js) - Google Analytics