按分隔符拆分字符串(java)

 

       本题是一道基础的程序应用题,我们将利用数组和字符串来解答这道题目,以便加深我们对其的理解与掌握 

分割拆分字符串原题:

     给你一个字符串数组 words 和一个字符 separator ,请你按 separator 拆分 words 中的每个字符串。

      返回一个由拆分后的新字符串组成的字符串数组,不包括空字符串 。

   默认代码格式: 

class Solution {
    public List<String> splitWordsBySeparator(List<String> words, char separator) {

    }
}

 

   注意事项:

  • separator 用于决定拆分发生的位置,但它不包含在结果字符串中。
  • 拆分可能形成两个以上的字符串。
  • 结果字符串必须保持初始相同的先后顺序。 

示例:

示例 1:

输入:words = ["one.two.three","four.five","six"], separator = "."
输出:["one","two","three","four","five","six"]
解释:在本示例中,我们进行下述拆分:

"one.two.three" 拆分为 "one", "two", "three"
"four.five" 拆分为 "four", "five"
"six" 拆分为 "six" 

因此,结果数组为 ["one","two","three","four","five","six"] 。

示例 2:

输入:words = ["$easy$","$problem$"], separator = "$"
输出:["easy","problem"]
解释:在本示例中,我们进行下述拆分:

"$easy$" 拆分为 "easy"(不包括空字符串)
"$problem$" 拆分为 "problem"(不包括空字符串)

因此,结果数组为 ["easy","problem"] 。

示例 3:

输入:words = ["|||"], separator = "|"
输出:[]
解释:在本示例中,"|||" 的拆分结果将只包含一些空字符串,所以我们返回一个空数组 [] 。 

以上便是这道题目所要求的输出结果,我们需要将输入的字符串从输出端口输出时删除

常规做法: 

 

class Solution {
    public List<String> splitWordsBySeparator(List<String> words, char separator) {
        List<String> res = new ArrayList<String>();  //创建一个数组列表来存放输入结果
        for (String word : words) {
            StringBuilder sb = new StringBuilder(); //创建一个stringbuilder来构建结果
            int length = word.length();  //获取单前字符长度
            for (int i = 0; i < length; i++) {
                char c = word.charAt(i);    //获取
                if (c == separator) {
                    if (sb.length() > 0) {
                        res.add(sb.toString());   //字符串添加其中
                        sb.setLength(0);
                    }
                } else {
                    sb.append(c);  
                }
            }
            if (sb.length() > 0) {        //检查是否有剩余字符串
                res.add(sb.toString());   
            }
        }
        return res;         //返回结果字符串列表
    }
}

 

大佬一行流:

class Solution {
    public List<String> splitWordsBySeparator(List<String> words, char separator) {
        return words.stream().map(e->e.split("\\"+String.valueOf(separator))).flatMap(Arrays::stream).filter(e->e.length()>0).collect(Collectors.toList());
    }
}

gpt给出对这段代码的解释是: 

        这段代码使用Java 8中的Stream API来实现字符串分割的功能。下面是对代码中使用的方法和原理的解释:

  1. words.stream():将输入的List转换为一个Stream对象,这样我们可以对其中的元素进行操作。

  2. .map(e->e.split("\\"+String.valueOf(separator))):使用map方法,将每个元素(即每个字符串)分割成一个String数组。这里使用了split方法来进行分割,使用的分割符是传入的separator字符。需要注意的是,由于split方法接受的是一个正则表达式,为了正确地使用separator作为分割符,我们需要将其转义为一个正则表达式的字符,所以使用了"\\"+String.valueOf(separator)的方式。

  3. .flatMap(Arrays::stream):使用flatMap方法,将每个数组中的元素展平成一个新的Stream。这样,我们就可以将每个分割后的字符串都作为一个新的元素,而不是一个数组中的元素。

  4. .filter(e->e.length()>0):使用filter方法,过滤掉长度为0的字符串。这样可以确保最终的结果中不包含空字符串。

  5. .collect(Collectors.toList()):使用collect方法,将Stream中的元素收集到一个List中,并返回该List作为结果。

                                                                                                        题目出自leetcode,仅供参考 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值