Java 字符串分割成数组,保留分隔符

        在日常开发中,经常会用到字符串分割,一般使用split方法,但是这种简单的方法不能保留分割符号,于是自己动手造轮子,记录一个字符传分割方法,适配单个字符分割,多个字符分割,均可保留分割符。

具体实现代码如下:

public static void main(String[] args) {
        final String[] aEach = splitSentence("[(WD1){D5}][(h7m0){h3}][(WD1){D5}]", "\\]\\[");
        System.out.println(aEach.length);
        final String[] aEach1 = splitSentence("[(WD1){D5}][(h7m0){h3}][(WD1){D5}]", "\\{");
        System.out.println(aEach1.length);
        final String[] aEach2 = splitSentence("[(WD1){D5}][(h7m0){h3}][(WD1){D5}]", "\\]\\[\\(");
        System.out.println(aEach2.length);
    }

    /**
     * 通过分隔符拆分句子,并保留分隔符
     *
     * @return
     */
    public static String[] splitSentence(String sentence, String chars) {
        //1. 定义匹配模式
        Pattern p = Pattern.compile(chars);
        Matcher m = p.matcher(sentence);

        //2. 拆分句子[拆分后的句子符号也没了]
        String[] words = p.split(sentence);
        String afterChars = chars.replace("\\", "");
        //3. 保留原来的分隔符
        if (afterChars.length() != 2) {
            if (words.length > 0) {
                int count = 0;
                while (count < words.length) {
                    if (m.find()) {
                        words[count] += m.group();
                    }
                    count++;
                }
            }
        } else {
            //chars.length() ==2
            if (words.length > 1) {
                int count = 0;
                String splitStr1 = afterChars.substring(0, 1);
                String splitStr2 = afterChars.substring(1, 2);
                while (count < words.length) {
                    if (count == 0) {
                        words[count] += splitStr1;
                    } else if (count == words.length - 1) {
                        words[count] = splitStr2 + words[count];
                    } else {
                        words[count] = splitStr2 + words[count] + splitStr1;
                    }
                    count++;
                }
            }
        }
        return words;
    }

运行结果:

  • 分隔符为2个字符

        aEach:以双分隔符"]["切分:结果:[(WD1){D5}] 、   [(h7m0){h3}]  、 [(WD1){D5}]

  • 分割符为单个字符

        aEach1:以双分隔符"}"切分:结果:[(WD1){D5}  、 ][(h7m0){h3}  、 ][(WD1){D5}  、]

  • 风格符为3个字符

aEach2:以双分隔符"][}"切分:结果:[(WD1){D5}][(  、 h7m0){h3}][(   、  WD1){D5}]

---------------------------------------------------------------------------------------------------------------------------------

幸福的人生,需要三种姿态:对过去,要淡;对现在,要惜;对未来,要信。

<think>嗯...用户这次想要的是关于JavaScript字符串切割数组的示例代码,看来ta正在处理字符串操作的问题。从ta引用的内容来看,用户似乎已经查阅过split的文档,但可能需要更具体的实例说明。注意到用户引用了四条资料:[^1]展示了一个带逻辑处理的迭代示例,[^2]特别强调了空字符串分割时的行为,[^3]列出了包括split在内的字符串方法,[^4]则提到了扩展运算符方案。这些引用其实已经覆盖了主要解决方案,但用户可能希望得到整合的说明。上次对话历史里用户询问过快速排序的实现,这次转向前端开发的基础操作,可能是刚接触JavaScript的新手。用户特意强调"不是真正的需求",说明ta需要的是可立即使用的代码片段而非理论解释。从问法"howto"和"example"来看,用户偏好实用型答案。最直接的回答应该聚焦split方法,这是字符串数组最常用的方案。需要特别说明:1基本用法:带分隔符的切割2特殊分隔符场景(空字符串、空格、多字符)3注意事项(如原始字符串不变性)4替代方案如[...spread]和Array.from用户引用的[^2]和[^4]特别有价值——空字符串分割会生单字符数组,而扩展运算符在简单场景更优雅。代码示例要包含这三种典型情况:"hello"->['h','e','l','l','o']"a,b,c"->['a','b','c']带空格的复合字符串处理最后补充现代浏览器支持的替代方案时,要像用户引用的[^4]那样标明ES6特性。虽然用户没问原理,但简要点明"字符串可迭代"的特性会帮助ta理解为何[...str]可行。</think> 以下是JavaScript将字符串切割数组的多种方法及示例代码(参考了您提供的引用内容): --- ### 1. **`split()` 基础用法** 通过指定分隔符切割字符串: ```javascript // 示例1:按空格分割 const str1 = "apple banana cherry"; const arr1 = str1.split(" "); console.log(arr1); // ["apple", "banana", "cherry"] // 示例2:按逗号分割 const str2 = "a,b,c,d"; const arr2 = str2.split(","); console.log(arr2); // ["a", "b", "c", "d"] // 示例3:空字符串分割为字符数组(引用[^2]) const name = "Hello"; const charArray = name.split(''); console.log(charArray); // ["H", "e", "l", "l", "o"] ``` --- ### 2. **处理特殊分隔符** ```javascript // 多字符分隔符(如 "&&") const str3 = "cat&&dog&&bird"; const arr3 = str3.split("&&"); console.log(arr3); // ["cat", "dog", "bird"] // 正则表达式分隔符(按数字切割) const str4 = "a1b22c333d"; const arr4 = str4.split(/\d+/); console.log(arr4); // ["a", "b", "c", "d"] ``` --- ### 3. **限制切割数量** `split()` 的第二个参数控制返回数组长度: ```javascript const str5 = "one-two-three-four"; const arr5 = str5.split("-", 2); console.log(arr5); // ["one", "two"] (只保留前2段) ``` --- ### 4. **ES6 扩展语法 `[...string]`**(引用[^4]) 直接转换字符串为字符数组: ```javascript const str6 = "JavaScript"; const arr6 = [...str6]; console.log(arr6); // ["J", "a", "v", "a", "S", "c", "r", "i", "p", "t"] ``` --- ### 5. **`Array.from()` 方法** ```javascript const str7 = "12345"; const arr7 = Array.from(str7); console.log(arr7); // ["1", "2", "3", "4", "5"] ``` --- ### 注意事项: - **空字符串行为**:`''.split('')` 返回空数组 `[]`,而非 `[""]`(引用[^2])。 - **无法分割**:若分隔符未匹配内容,返回包含原字符串数组(如 `"hello".split("x") → ["hello"]`)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值