【问题标题】:Can't split a line in Java不能在Java中分割一行
【发布时间】:2018-11-26 09:35:58
【问题描述】:

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

【问题讨论】:

  • 这看起来不像是简单拆分的工作。除了那个示例行之外,对格式一无所知,很难说一个人将如何解析它。最简单的情况是,可能首先提取大括号内的部分(使用indexOfsubstring()),然后在, 上拆分以获取对,然后在= 上拆分以获取键和值。
  • 你为什么逃脱了一切?只是 "[\\s-.'?,_@]+" 不是你要找的吗?如有疑问,请使用 regexr.com 之类的东西来测试正则表达式

标签: java regex


【解决方案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 在换行符之后 - 我错过了它好吧(它不可见)。代码已更新。
  • 谢谢!解决了。​​
  • 是否可以将此打印信息添加到 ArrayList 中?我已经声明了我的 ArrayList: private ArrayList quick = new ArrayList();因此,如果我想在其中添加打印信息,应该是这样的: quick.add(new Pastatas(String,int ,int ,int ));
  • 我猜可以加了。
【解决方案2】:

删除 '{' 之前的所有字符,包括 '{' 删除 '}' 之后的所有字符,包括 '}' 您可以使用 indexOf 方法和子字符串来完成这两者。

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

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

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

【讨论】:

    【解决方案3】:

    这是一个使用正则表达式和 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

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 2015-10-06
      • 2011-05-03
      • 2020-03-07
      • 1970-01-01
      • 2017-06-16
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多