我遇到的问题是我不知道正确分割这条线。我只需要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}]
答案 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