我有以下类型的数据(用空格分隔):
我想拆分数据,这样我就可以将字符串分成一个字符串变量和要存储的数字,并将其映射到对象中的其他变量。
我尝试过在java中使用拆分和正则表达式,但是我无法破解它。
Matcher matcher = Pattern.compile("\\w+.").matcher(string);
仅返回第一个字符串。
Matcher matcher1 = Pattern.compile("\\d+.").matcher(string);
这个函数只返回第一个数字。
String str = data.text().split("[0-9]")[0];
这个可以获取文本字符串,但是我不确定如何获取数字。
我希望所有字符串都从数字中分离出来,这样我就可以将字符串映射到类中的其他属性,并将数字映射到类中的单独属性。
任何帮助都将不胜感激!提前谢谢。
发布于 2018-10-05 09:03:24
我不会尝试用一个正则表达式来做所有的事情,而是把它分解成两个操作。首先,匹配右侧的五个值。然后,您可以查找该子字符串的索引,以查找所需的String
数据的结束位置。就像这样
String[] arr = { "String1 String2 12 348 51 34 567", "StringAlone 12 348 51 34 567",
"ManyString ManyString1 ManyString2 12 348 51 34 567" };
Pattern right = Pattern.compile("(\\d+ \\d+ \\d+ \\d+ \\d+)$");
for (String data : arr) {
Matcher m = right.matcher(data);
if (m.find()) {
String token = m.group();
String str = data.substring(0, data.indexOf(token) - 1);
System.out.println(str);
int[] numbers = Arrays.stream(token.split(" "))
.mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(numbers));
}
}
我得到了
String1 String2
[12, 348, 51, 34, 567]
StringAlone
[12, 348, 51, 34, 567]
ManyString ManyString1 ManyString2
[12, 348, 51, 34, 567]
发布于 2018-10-05 09:03:04
在String
中仍有匹配项时,可以使用find()
方法保持循环
while(matcher.find()) {
System.out.println(matcher.group());
}
下面是一个将结果放入ArrayList
中的示例
String string = "String1 String2 12 348 51 34 567";
ArrayList<String> strArr = new ArrayList<>();
ArrayList<Integer> numArr = new ArrayList<>();
Matcher matcher = Pattern.compile("\\w+.").matcher(string);
while(matcher.find()) {
strArr.add(matcher.group());
}
Matcher matcher2 = Pattern.compile("\\d+").matcher(string);
while(matcher.find()) {
numArr.add(Integer.parseInt(matcher.group().trim()));
}
strArr.stream().forEach(System.out::println);
numArr.stream().forEach(System.out::println);
使用输出(用于String
"String1 String2 12 348 51 34 567"
)
String1
String2
12
348
51
34
567
https://stackoverflow.com/questions/52656898
复制相似问题