首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正则表达式或拆分以获取Java格式的数据

正则表达式或拆分以获取Java格式的数据
EN

Stack Overflow用户
提问于 2018-10-05 08:51:05
回答 2查看 111关注 0票数 1

我有以下类型的数据(用空格分隔):

  • String1 String2 12 348 51 34 567
  • StringAlone 12 348 51 34 567
  • ManyString ManyString1 ManyString2 12 348 51 34 567

我想拆分数据,这样我就可以将字符串分成一个字符串变量和要存储的数字,并将其映射到对象中的其他变量。

我尝试过在java中使用拆分和正则表达式,但是我无法破解它。

代码语言:javascript
复制
Matcher matcher = Pattern.compile("\\w+.").matcher(string);

仅返回第一个字符串。

代码语言:javascript
复制
Matcher matcher1 = Pattern.compile("\\d+.").matcher(string);

这个函数只返回第一个数字。

代码语言:javascript
复制
String str = data.text().split("[0-9]")[0];

这个可以获取文本字符串,但是我不确定如何获取数字。

我希望所有字符串都从数字中分离出来,这样我就可以将字符串映射到类中的其他属性,并将数字映射到类中的单独属性。

任何帮助都将不胜感激!提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-05 09:03:24

我不会尝试用一个正则表达式来做所有的事情,而是把它分解成两个操作。首先,匹配右侧的五个值。然后,您可以查找该子字符串的索引,以查找所需的String数据的结束位置。就像这样

代码语言:javascript
复制
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));
    }
}

我得到了

代码语言:javascript
复制
String1 String2
[12, 348, 51, 34, 567]
StringAlone
[12, 348, 51, 34, 567]
ManyString ManyString1 ManyString2
[12, 348, 51, 34, 567]
票数 1
EN

Stack Overflow用户

发布于 2018-10-05 09:03:04

String中仍有匹配项时,可以使用find()方法保持循环

代码语言:javascript
复制
while(matcher.find()) {
    System.out.println(matcher.group());
}

下面是一个将结果放入ArrayList中的示例

代码语言:javascript
复制
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")

代码语言:javascript
复制
String1 
String2 
12 
348 
51 
34 
567
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52656898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档