`

Bash字符串处理(与Java对照) - 13.字符串数组连接(以指定分隔符合并)

阅读更多

Bash字符串处理(与Java对照) - 13.字符串数组连接(以指定分隔符合并)

In Java

以指定的分隔符将字符串数组连接成一个字符串的源码

以下代码来自:http://www.oschina.net/code/explore/jsoup-1.4.1/helper/StringUtil.java

    /***
     * Join a collection of strings by a seperator
     * @param strings collection of string objects
     * @param sep string to place between strings
     * @return joined string
     */
    public static String join(Collection<String> strings, String sep) {
        return join(strings.iterator(), sep);
    }

    /***
     * Join a collection of strings by a seperator
     * @param strings iterator of string objects
     * @param sep string to place between strings
     * @return joined string
     */
    public static String join(Iterator<String> strings, String sep) {
        if (!strings.hasNext())
            return "";

        String start = strings.next();
        if (!strings.hasNext()) // only one, avoid builder
            return start;

        StringBuilder sb = new StringBuilder(64).append(start);
        while (strings.hasNext()) {
            sb.append(sep);
            sb.append(strings.next());
        }
        return sb.toString();
    }
 

StringUtils.join

提供了九种join方法

org.apache.commons.lang.StringUtils join方法 写道
static String join(Collection collection, char separator)
Joins the elements of the provided Collection into a single String containing the provided elements.
static String join(Collection collection, String separator)
Joins the elements of the provided Collection into a single String containing the provided elements.
static String join(Iterator iterator, char separator)
Joins the elements of the provided Iterator into a single String containing the provided elements.
static String join(Iterator iterator, String separator)
Joins the elements of the provided Iterator into a single String containing the provided elements.
static String join(Object[] array)
Joins the elements of the provided array into a single String containing the provided list of elements.
static String join(Object[] array, char separator)
Joins the elements of the provided array into a single String containing the provided list of elements.
static String join(Object[] array, char separator, int startIndex, int endIndex)
Joins the elements of the provided array into a single String containing the provided list of elements.
static String join(Object[] array, String separator)
Joins the elements of the provided array into a single String containing the provided list of elements.
static String join(Object[] array, String separator, int startIndex, int endIndex)
Joins the elements of the provided array into a single String containing the provided list of elements.
 

 

In Bash

将数组中的字符串合并。

数组的定义方式如下:

ARR=(S1 S2 S3)

 

以空格分隔

格式1:STR=${ARR[*])

格式2:STR=${ARR[@])

格式3:STR="${ARR[*]}"

格式4:STR="${ARR[@]}"

 

[root@jfht ~]# ARR=(S1 S2 S3)

[root@jfht ~]# echo "${ARR[*]}"
S1 S2 S3

[root@jfht ~]# echo "${ARR[@]}"        
S1 S2 S3
[root@jfht ~]#

 

不分隔

str_join() {

    local dst

    for s in "$@"

    do

        dst=${dst}${s}

    done

    echo "$dst"

}

 

错误:str_join "$ARR[@]"

错误:str_join $ARR[@]

错误:str_join "$ARR[*]"

错误:str_join $ARR[*]

 

[root@jfht ~]# declare -f str_join
str_join ()
{
    local dst;
    for s in "$@";
    do
        dst=${dst}${s};
    done;
    echo "$dst"
}

[root@jfht ~]# ARR=(yes no 'hello world')
[root@jfht ~]# str_join ${ARR[*]}
yesnohelloworld
[root@jfht ~]# str_join ${ARR[@]}
yesnohelloworld
[root@jfht ~]# str_join "${ARR[*]}"
yes no hello world
[root@jfht ~]# str_join "${ARR[@]}"
yesnohello world
[root@jfht ~]#

 

以指定分隔符来分隔

实现方式一

str_join_sep ()
{

    local sep="$1"

    shift
    local dst
    for s in "$@"
    do

        if [ "$dst" ]; then
            dst=${dst}${sep}${s}

        else

            dst=${s}

        fi
    done
    echo "$dst"
}

 

正确:str_join_sep "$SEP" "$ARR[@]"

注意双引号的使用。

 

[root@jfht ~]# declare -f str_join_sep
str_join_sep ()
{
    local sep="$1";
    shift;
    local dst;
    for s in "$@";
    do
        if [ "$dst" ]; then
            dst=${dst}${sep}${s};
        else
            dst=${s};
        fi;
    done;
    echo "$dst"
}
[root@jfht ~]# ARR=(yes no 'hello world')    
[root@jfht ~]# SEP=,
[root@jfht ~]# str_join_sep "$SEP" "${ARR[@]}"
yes,no,hello world
[root@jfht ~]#

 

实现方式二

str_join_sep ()
{

    local sep="$1"

    shift
    local dst="$1"

    shift
    for s in "$@"
    do

        dst=${dst}${sep}${s}

    done
    echo "$dst"
}

 

[root@jfht ~]# declare -f str_join_sep
str_join_sep ()
{
    local sep="$1";
    shift;
    local dst="$1";
    shift;
    for s in "$@";
    do
        dst=${dst}${sep}${s};
    done;
    echo "$dst"
}
[root@jfht ~]# ARR=(yes no 'hello world')
[root@jfht ~]# SEP=,
[root@jfht ~]# str_join_sep "$SEP" "${ARR[@]}"
yes,no,hello world
[root@jfht ~]# SEP=:
[root@jfht ~]# str_join_sep "$SEP" "${ARR[@]}"
yes:no:hello world
[root@jfht ~]# SEP='|'

注意加上单引号,否则Bash认为是管道线。
[root@jfht ~]# str_join_sep "$SEP" "${ARR[@]}"
yes|no|hello world
[root@jfht ~]#

 

 

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

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

上节内容:Bash字符串处理(与Java对照) - 12.字符串连接

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

 

 

4
3
分享到:
评论

相关推荐

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

    mysql-connector-java-8.0.13.jar

    在上述命令中,`--connect`参数指定了MySQL的JDBC连接字符串,而Sqoop会自动使用MySQL Connector/J执行数据迁移。 综上所述,MySQL Connector/J 8.0.13是Java开发者与MySQL数据库交互的关键组件,它为Java应用程序...

    libaio-devel-0.3.106(i386 x86_64)

    安装完成后,libaio-devel 提供的头文件(如 `libaio.h`)和开发库将可供编译时链接使用,使得 Oracle 安装脚本能够正确识别并使用这个关键的异步 I/O 支持。 总之,libaio-devel-0.3.106 对于成功安装和运行 ...

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

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

    fontconfig-2.13.0-4.3.el7.x86_64.zip

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

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

    修复redhat6 bash远程执行任意代码漏洞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 /...

    Advanced Bash-Scripting Guide <>

    9.2. 操作字符串 9.3. 参数替换 9.4. 指定类型的变量:declare 或者typeset 9.5. 变量的间接引用 9.6. $RANDOM: 产生随机整数 9.7. 双圆括号结构 10. 循环和分支 10.1. 循环 10.2. 嵌套循环 10.3. 循环控制 10.4. ...

    protoc.exe和protobuf-java-2.5.0.jar集合

    通过在命令行中调用这个编译器,开发者可以指定.proto文件,并选择生成Java、C++或Python等语言的代码。例如,如果你有一个名为`myproto.proto`的文件,你可以使用以下命令生成Java代码: ```bash protoc --java_...

    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,可以...

    arm-linux-gcc-4.4.3.tar.gz

    在编写Makefile时,确保指定正确的编译器和链接器。 注意,交叉编译过程中可能会遇到各种问题,如库的版本不匹配、依赖缺失等,需要根据具体错误信息进行解决。同时,不同的目标硬件可能需要不同的编译选项,因此在...

    apache-tomcat-7.0.70.tar.gz

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

    Linux高级bash编程

    高级bash编程 高级Bash脚本编程指南(一) 目录 ++++ 第一部分. 热身 1. 为什么使用shell编程 2. 带着一个Sha-Bang出发(Sha-Bang指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊...

    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)代表了字体的分辨率...

    numpy-1.26.4-cp311-cp311-win-amd64.whl

    此外,numpy还提供了广播功能,可以自动扩展单维度数组以匹配多维度数组的形状,进行高效的数组间运算。 numpy-1.26.4是numpy的稳定版本,包含了对之前版本的改进和错误修复。在这个版本中,用户可以期待更加稳定和...

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

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

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

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

    jdk-11.0.16.1_linux-x64_bin.tar.gz

    5. **强类型字符串连接(JEP 359)**:增强了字符串连接操作的性能,使得在连接字符串时无需创建额外的StringBuilder实例。 6. **删除Java EE和Corba模块(JEP 320)**:移除了不再维护的Java EE和Corba相关模块,...

Global site tag (gtag.js) - Google Analytics