Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文本文件中剥离数据_Java_Regex_Fileinputstream_Datainputstream - Fatal编程技术网

Java 从文本文件中剥离数据

Java 从文本文件中剥离数据,java,regex,fileinputstream,datainputstream,Java,Regex,Fileinputstream,Datainputstream,我将开始张贴什么样的日期在文本文件看起来像,这只是4行,实际上文件是一个几百行长 2011年9月9日,星期五 -STV 101------05:00-23:59 SSB 4185报告于2011年8月9日2:37打印 0-AH 104------07:00-23:00 AH健身房报告于2011年8月9日2:37打印 -BG 105------07:00-23:00 SH大会堂报告于2011年8月9日2:37打印 我想对这个文本文件做的是忽略第一行上的日期,然后忽略下一行上的“-”,但读入“STV

我将开始张贴什么样的日期在文本文件看起来像,这只是4行,实际上文件是一个几百行长

2011年9月9日,星期五
-STV 101------05:00-23:59 SSB 4185报告于2011年8月9日2:37打印

0-AH 104------07:00-23:00 AH健身房报告于2011年8月9日2:37打印

-BG 105------07:00-23:00 SH大会堂报告于2011年8月9日2:37打印

我想对这个文本文件做的是忽略第一行上的日期,然后忽略下一行上的“-”,但读入“STV 101”、“5:00”和“23:59”,将它们保存到变量中,然后忽略该行上的所有其他字符,然后对之后的每一行如此

以下是我目前阅读全文的方式。然后,一旦用户将路径放入scheduleTxt JTextfield,我就调用这个函数。它可以很好地读取和打印每一行。

public void readFile()引发IOException { 尝试 { FileInputStream fstream=新的FileInputStream(scheduleTxt.getText()); DataInputStream in=新的DataInputStream(fstream); BufferedReader br=新的BufferedReader(新的InputStreamReader(in)); 弦斯特林; 而((strLine=br.readLine())!=null) { System.out.println(strLine); } in.close(); } catch(异常e){//catch异常(如果有) System.err.println(“错误:+e.getMessage()); } }

更新:我还需要将Friday从顶行中去掉,并将其放入变量中
谢谢牛肉。

没有对其进行彻底测试,但此正则表达式将捕获组2、5和7中所需的信息:(假设您只对“0-AH 104--”示例中的“AH 104”感兴趣)
^(\S)*-([^-])*(-)+((\S)+)\S-\S((\S)+)\S(.)*

可以使用非捕获组对表达式进行调优,以便只捕获所需的信息

对regexp元素的解释:

  • ^(\S)*-
    匹配以
    -
    结尾的一组非空白字符。注意:如果第一个
    -
    前面有空格,则可能是
    ^(.)*-
    而不是
  • (([^-])*)
    匹配除
    -
    之外的每个字符组
  • (-)+
    匹配一个或多个
    -
    的组
  • ((\S)+
    匹配一个或多个非空白字符组。这是在第5组中捕获的
  • \s-\s
    匹配一组空格,后跟
    -
    和空格
  • “(\S)+”与4相同。这是在第7组中捕获的
  • \s(.)*
    匹配将被跳过的空格后跟任何内容
  • 有关正则表达式的更多信息,请访问此网站。
    还有一些有用的方法。在设计/调试表达式时,a也很有用。

    是的,在“0-AH 104--”的情况下,我只想要“AH 104”,谢谢,我将尝试一下,看看我得到了什么!更新:工作得很好,用更广泛版本的文本文件进行了测试,工作没有问题,感谢againI,我们在答案中添加了对表达式元素的解释,以便进一步了解reference@Beef如果文件格式是固定的,您可以在测试表达式之前在字符串中查找
    ,并保留
    strLine.split(“,”[0]
    。我刚刚被告知,我可能使用的格式与此不同,但我将对此提出异议,但如果我确实必须使用不同的格式,我希望我可以使用您对答案的编辑来帮助相应地更改正则表达式搜索 public void readFile () throws IOException { try { FileInputStream fstream = new FileInputStream(scheduleTxt.getText()); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strLine; while ((strLine = br.readLine()) != null) { System.out.println (strLine); } in.close(); } catch (Exception e){//Catch exception if any System.err.println("Error: " + e.getMessage()); } }
        String regex = "^(\\S)*-(([^-])*)(-)+((\\S)+)\\s-\\s((\\S)+)\\s(.)*";
        Pattern pattern = Pattern.compile(regex);
        while ((strLine = br.readLine()) != null){
            Matcher matcher = pattern.matcher(strLine);
            boolean matchFound = matcher.find();
            if (matchFound){
                String s1 = matcher.group(2);
                String s2 = matcher.group(5);
                String s3 = matcher.group(7);
                System.out.println (s1 + " " + s2 + " " + s3);
            }
    
        }