在n个字符后开始读一行

时间:2017-12-04 14:03:35

标签: java

我正在制作一个从互联网上获取数据的程序,更具体地说是这个网址:https://raw.githubusercontent.com/openfootball/eng-england/master/2017-18/1-premierleague-i.txt

我想根据结果计算排名,但我正在努力阅读文件,因为我还没弄清楚如何在行中间得到结果。我注意到文本中有一定的模式,例如结果总是写在27个字符之后,以空格开头,但我不知道如何将其实现到我的代码中以便提取结果我也想知道是否有更好的方法来实现这一点(我尝试使用分隔符,但它没有用)。 因此,非常感谢任何帮助或建议。

3 个答案:

答案 0 :(得分:0)

您可以使用匹配器获得结果,请参阅下面的代码。您只需要逐行读取文件

public static void main(String[] args) {
        String mydata = "Arsenal FC               4-3  Leicester City";
        Pattern pattern = Pattern.compile("[0-9]{1,2}-[0-9]{1,2}");
        Matcher matcher = pattern.matcher(mydata);
        String result = "";
        if (matcher.find()) {
            result = matcher.group();
            mydata = mydata.replace(result, "#");
        }
        String[] dataSplit = mydata.split("#");

        HashMap<String, String> match = new HashMap<>();

        match.put("local", dataSplit[0].trim());
        match.put("visitor", dataSplit[1].trim());
        match.put("result", result);

        System.out.println(match.get("local"));
        System.out.println(match.get("result"));
        System.out.println(match.get("visitor"));
}

输出:

Arsenal FC 4-3 Leicester City

如果你有结果,你可以替换为#,例如,然后用#分割该行,你得到两个团队。从这里可以轻松地创建一个包含两个团队和匹配结果的地图或json

答案 1 :(得分:0)

只需使用substringtrim的组合以及一些解析。

public Map<String, Integer> getScore(String line) {
  String host = line.substring(2,25).trim();
  String guest = line.substring(32).trim();
  String[] scores = line.substring(25, 32).trim().split("-");
  Map<String,Integer> matchScore = new LinkedHashMap<>();
  matchScore.put(host, Integer.valueOf(scores[0]));
  matchScore.put(guest, Integer.valueOf(scores[1]))
  return matchScore;
}

答案 2 :(得分:0)

skip(n)阅读时,您只需使用BufferedReader即可跳过 n 个字符,然后使用line()获取其余部分。

  

<强> skip

public long skip(long n)
      throws IOException
     

跳过字符。