无法在Java中分割线

时间:2018-11-26 09:35:59

标签: java regex

我遇到的问题是我不知道正确分割这条线。我只需要RandomAdresas0 100 2018 1

 String line = Files.readAllLines(Paths.get(failas2)).get(userInp);
            System.out.println(line);
            arr = line.split("[\\s\\-\\.\\'\\?\\,\\_\\@]+");;

行内内容:

[Pastatas{pastatoAdresas='RandomAdresas0',pastatoAukstuSkaicius=100,pastatoPastatymoData=2018, pastatoButuKiekis=1}]

3 个答案:

答案 0 :(得分:1)

您可以尝试以下代码(基本上是提取两个定界符之间的字符串):

String ss = "[Pastatas{pastatoAdresas='RandomAdresas0',pastatoAukstuSkaicius=100,pastatoPastatymoData=2018, pastatoButuKiekis=1}]";
Pattern pattern = Pattern.compile("=(.*?)[,}]");
Matcher matcher = pattern.matcher(ss);
while (matcher.find()) {
    System.out.println(matcher.group(1).replace("'", ""));
}

此输出:

RandomAdresas0
100
2018

答案 1 :(得分:0)

删除“ {”之前的所有字符,包括“ {” 删除“}”之后的所有字符,包括“}” 您可以通过使用indexOf方法和子字符串来实现两者。

现在您将只剩下以下内容:

pastatoAdresas ='RandomAdresas0',pastatoAukstuSkaicius = 100,pastatoPastatymoData = 2018,pastatoButuKiekis = 1

在此之后,请阅读此[thread] [1]:Parse a string with key=value pair in a map?

答案 2 :(得分:0)

这里是使用正则表达式和Pattern&Matcher类的解决方案。可以使用group()方法检索您想要的值,只要find()返回true,就可以通过循环获取所有值。

String data = "[Pastatas{pastatoAdresas='RandomAdresas0',pastatoAukstuSkaicius=100,pastatoPastatymoData=2018, pastatoButuKiekis=1}]";
Pattern pattern = Pattern.compile("=([^, }]*)");
Matcher matcher = pattern.matcher(data);
while (matcher.find()) {
    System.out.printf("[%d:%d] %s", matcher.start(), matcher.end(), matcher.group(1));
}

匹配的值在组1中,组0匹配整个reg ex