[会写代码的健身爱好者成长史]之long类型的list集合,将其转化为带用 “,” 分割开来的String字符串

该博客介绍了如何使用Java编写一个私有静态方法,将List<Long>类型的longList转换为用逗号分隔的字符串形式,便于字符串展示。
/**
     * long类型的list集合,将其转化为带用 “,” 分割开来的String字符串
     * @param longList 传入的List<Long>
     * @return
     */
    private static String longListToString(List<Long> longList){
        StringBuilder stringBuilder = new StringBuilder();
        for (Long longs : longList) {
            String s = String.valueOf(longs);
            stringBuilder.append(s).append(",");
        }
        String s = stringBuilder.toString();
        return s.substring(0, s.length() - 1);
    }

 

<think>我们有一个字符串:"12|33|45",需要按"|"分割,然后换为List<Long>。 根据引用[3]和引用[4]中的方法,我们可以使用Java 8的Stream API来实现。 基本步骤: 1. 使用split方法分割字符串,得到字符串数组。 2. 将字符串数组换为流(Stream)。 3. 使用map操作将每个字符串元素换为Long类型。 4. 使用collect操作将流收集到List中。 但是注意,我们的分隔符是"|",而"|"在正则表达式中是特殊字符,需要义,因此应该成"\\|"。 引用[4]中的例子是将逗号分隔的字符串换为List<Long>,我们可以类似地处理,只需将分隔符改为"\\|"。 代码示例: 引用[4]中的代码String ids= "1,2,3,4,5,6"; List<Long> listIds = Arrays.asList(ids.split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()); 我们可以修改为: String str = "12|33|45"; List<Long> list = Arrays.stream(str.split("\\|")) .map(String::trim) .map(Long::parseLong) .collect(Collectors.toList()); 或者,我们可以直接使用Arrays.stream,而不需要先List流,效率更高: List<Long> list = Arrays.stream(str.split("\\|")) .map(String::trim) .map(Long::parseLong) .collect(Collectors.toList()); 另外,考虑到字符串中可能没有空格,但为了健壮性,我们使用trim()来去除可能的空格。 但是,如果字符串中有空格,例如"12 |33| 45",那么使用trim()可以去掉每个部分前后的空格。如果确定没有空格,也可以省略trim()。 因此,最终代码可以是: ```java import java.util.List; import java.util.stream.Collectors; import java.util.Arrays; public class StringToListLongExample { public static void main(String[] args) { String str = "12|33|45"; List<Long> list = Arrays.stream(str.split("\\|")) .map(String::trim) .map(Long::parseLong) .collect(Collectors.toList()); System.out.println(list); // 输出: [12, 33, 45] } } ``` 注意:如果字符串中包含非数字的字符,Long.parseLong会抛出NumberFormatException,因此在实际应用中需要处理异常或确保字符串格式正确。 另外,引用[3]中展示了另一种方式,它是将List<Long>换为逗号分隔的字符串,与我们的需求相反。 所以,根据需求,我们采用上述方法。 如果使用Java 8之前的版本,可以使用循环来实现: ```java import java.util.ArrayList; import java.util.List; public class StringToListLongExample { public static void main(String[] args) { String str = "12|33|45"; String[] parts = str.split("\\|"); List<Long> list = new ArrayList<>(); for (String part : parts) { list.add(Long.parseLong(part.trim())); } System.out.println(list); } } ``` 但根据引用,用户没有指定Java版本,我们优先展示Java 8的流式法。 因此,我们提供两种方式,但推荐使用Java 8的Stream API。 </think> ### Java字符串分割换方法 根据您的需求,将字符串 `"12|33|45"` 按竖线 `|` 分割换为 `List<Long>` 集合,以下是两种实现方法: #### 方法1:使用Java 8 Stream API(推荐) ```java import java.util.List; import java.util.stream.Collectors; import java.util.Arrays; public class StringToListLong { public static void main(String[] args) { String input = "12|33|45"; // 使用Stream处理 List<Long> result = Arrays.stream(input.split("\\|")) // 义竖线分割 .map(String::trim) // 去除空格 .map(Long::parseLong) // Long .collect(Collectors.toList()); // 收集为List System.out.println(result); // 输出: [12, 33, 45] } } ``` - **关键点说明**: 1. `split("\\|")`:竖线 `|` 是正则表达式特殊字符,需双重义 2. `trim()`:防止数字前后有空格(如 `"12 | 33"`) 3. `Long::parseLong`:字符串Long类型 4. 时间复杂度:$O(n)$,n为分割后的元素数量 #### 方法2:传统循环实现(兼容旧版Java) ```java import java.util.List; import java.util.ArrayList; public class StringToListLong { public static void main(String[] args) { String input = "12|33|45"; List<Long> result = new ArrayList<>(); String[] parts = input.split("\\|"); // 分割字符串 for (String part : parts) { result.add(Long.parseLong(part.trim())); // 换并添加 } System.out.println(result); // 输出: [12, 33, 45] } } ``` #### 注意事项: 1. **异常处理**:实际使用中需捕获 `NumberFormatException` ```java try { Long.parseLong(part.trim()); } catch (NumberFormatException e) { // 处理非法数字格式 } ``` 2. **空值检查**:建议添加空字符串过滤 ```java .filter(s -> !s.isEmpty()) // Stream中过滤空值 ``` 3. **特殊字符**:若需处理其他分隔符(如逗号),修改 `split()` 参数即可 > 这些方法基于字符串分割类型换的核心逻辑,参考了Java标准库文档[^1][^2]和Stream API最佳实践[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值