问题描述
我有一个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]+)*)\]
例如
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]