Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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 - Fatal编程技术网

Java:有没有办法解析文本文件?

Java:有没有办法解析文本文件?,java,Java,我对Java语言一无所知。虽然我已经学习了很多关于String类和文件I/O的知识,但是对我来说有效地操作字符串是很困难的。在编写了一些代码之后,我发现String类中的split方法并不是万能的。我想像这样解析这个文本文件 1 (201, <202,203>), (203, <204,208>), (204, <>) 2 (201, <202,203>), (204, <>) 3 (201, <202,203>

我对Java语言一无所知。虽然我已经学习了很多关于String类和文件I/O的知识,但是对我来说有效地操作字符串是很困难的。在编写了一些代码之后,我发现String类中的split方法并不是万能的。我想像这样解析这个文本文件

1   (201, <202,203>), (203, <204,208>), (204, <>)
2   (201, <202,203>), (204, <>)
3   (201, <202,203>), (203, <204,208>)
4   (201, <202,203>), (202, <>), (208, <>)
5   (202, <>), (208, <>)
6   (202, <>)

因为您想提取每行的数值,所以我建议您看看这个类。下面是一段简单的代码:

   String str = "1   (201, <202,203>), (203, <204,208>), (204, <>)";
   Pattern p = Pattern.compile("(\\d+)");
   Matcher m = p.matcher(str);
   while(m.find())
   {
       System.out.println(m.group(1));
   }

基本上,该模式将寻找一个或多个重复的数字。当它找到它们时,它会将它们放在组中,然后再访问这些组。

由于您希望提取每行的数值,我建议您查看该类。下面是一段简单的代码:

   String str = "1   (201, <202,203>), (203, <204,208>), (204, <>)";
   Pattern p = Pattern.compile("(\\d+)");
   Matcher m = p.matcher(str);
   while(m.find())
   {
       System.out.println(m.group(1));
   }

基本上,该模式将寻找一个或多个重复的数字。当它找到它们时,它会将它们放入组中,然后再访问这些组。

您也可以使用StringTokenizer类。代码如下所示:

导入java.util.StringTokenizer

公共类应用程序{ 公共静态无效字符串[]args{

    String str = "1   (201, <202,203>), (203, <204,208>), (204, <>)";
    StringTokenizer st = new StringTokenizer( str, " ,()<>" );


    while ( st.hasMoreElements() ) {
        System.out.println( st.nextElement() );
    }

}
}

输出打印:

一, 201 202 203 203 204 208
204

您也可以使用StringTokenizer类。代码如下所示:

导入java.util.StringTokenizer

公共类应用程序{ 公共静态无效字符串[]args{

    String str = "1   (201, <202,203>), (203, <204,208>), (204, <>)";
    StringTokenizer st = new StringTokenizer( str, " ,()<>" );


    while ( st.hasMoreElements() ) {
        System.out.println( st.nextElement() );
    }

}
}

输出打印:

一, 201 202 203 203 204 208
204

这不起作用..replaceAll需要两个参数,你想匹配的正则表达式和你想替换的文本。另外,和是正则表达式的特殊关键字,所以它们需要像这样转义:\\\\\\。哇,抱歉。时间还早。最后一件事我忘了提到,当你拆分时,最好使用这个:\\s*,\\s*,因为任何空格都会阻止parseInt方法。这不起作用。.replaceAll需要2个参数,你要匹配的正则表达式和你要替换的文本。另外,和是正则表达式的特殊关键字,所以它们需要像这样转义:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\使用此选项的一个好主意:\\s*,\\s*,因为任何空格都会阻止parseInt方法。oops没有注意到答案非常相似。将删除我的,并+1@PopoFibo:我不知道你的方法是否会生成空元素。如果一行没有数字,那么是的,它将不会注意到答案非常相似。将删除我的,并且+1@PopoFibo:我不知道你的方法是否会生成空元素。如果一行没有数字,那么它会
1
201
202
203
203
204
208
204
    String str = "1   (201, <202,203>), (203, <204,208>), (204, <>)";
    StringTokenizer st = new StringTokenizer( str, " ,()<>" );


    while ( st.hasMoreElements() ) {
        System.out.println( st.nextElement() );
    }

}