执行String .split时无法删除前导空格

问题描述

我有一个String [81,82,83,84,85,86,87,88,89,90],我正在尝试使用所有值从中创建String数组。

String[] array = postId.split("[\\]\\,\\[\\s]+"); 

我将数组中的第一个元素作为空格获取,其余所有元素都很好。因此,我在数组中得到11个而不是10个。

在对数组进行sysout迭代时,我得到以下值。您可以看到我得到的第一个值为空/空格。

0 index item in array = 
1 index item in array = 81
2 index item in array = 82
3 index item in array = 83
4 index item in array = 84
5 index item in array = 85
6 index item in array = 86
7 index item in array = 87
8 index item in array = 88
9 index item in array = 89
10 index item in array = 90

解决方法

首先,将[]替换为"",然后使用正则表达式,\\s*

进行拆分。
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String str = "[81,82,83,84,85,86,87,88,89,90]";
        String arr[] = str.replace("[","").replace("]","").split(",\\s*");
        System.out.println(Arrays.toString(arr));
    }
}

输出:

[81,90]
,

我将使用正则表达式执行此任务。

public static String[] extractNumbers(String str) {
    Pattern pattern = Pattern.compile("\\d+");
    Matcher matcher = pattern.matcher(str);
    List<String> numbers = new ArrayList<>();

    while (matcher.find()) {
        numbers.add(matcher.group(0));
    }

    return numbers.toArray(String[]::new);
}
,

您可以使用子字符串来消除方括号:

import java.util.*;
public class MyClass {
    public static void main(String args[]) {
      String postId = "[81,90]";
      String[] array = postId.substring(1,postId.length()-1).split("[\\]\\,\\[\\s]+"); 
      System.out.println(Arrays.toString(array));

    }
}
,

要获取示例字符串的确切格式的数字,可以使用一种模式首先匹配该格式,然后捕获组1中用逗号分隔的值。

然后使用第1组中的值,并以逗号分割,后跟1个或多个水平空白字符。

\bString\h+\[([0-9]+(?:,\h+[0-9]+)*)\]

Regex demo | Java demo

例如

String regex = "\\bString\\h+\\[([0-9]+(?:,\\h+[0-9]+)*)\\]";
String string = "String [81,90]";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
    String[] array = matcher.group(1).split(",\\h+");
    System.out.println(Arrays.toString(array));
}

输出

[81,90]