我是Java语言的新手。虽然我已经学习了很多关于String类和fIle 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, <>)
第一列是此文本文件中的字符,而不是行号。 在读完它的第一行之后,我希望顺序接收1,201,202,203,203,204,208和204,作为int值。什么字符串方法使用它是个好主意?提前谢谢。
代码(您可能不需要。)
import java.io.*;
public class IF_Parser
{
private FileInputStream fstream;
private DataInputStream in;
private BufferedReader br;
public IF_Parser(String filename) throws IOException
{
try
{
fstream = new FileInputStream(filename);
// Get the object of DataInputStream
in = new DataInputStream(fstream);
br = new BufferedReader(new InputStreamReader(in));
}
catch (Exception e)
{
System.err.println("Error: " + e.getMessage());
}
}
public void Parse_given_file() throws IOException
{
try
{
String strLine;
int line = 1;
while ((strLine = br.readLine()) != null)
{
System.out.println("Line " + line);
int i;
String[] splits = strLine.split("\t");
// splits[0] : int value, splits[1] : string representation of list of postings.
String[] postings = splits[1].split(" ");
line++;
}
}
catch (Exception e)
{
System.err.println("Error: " + e.getMessage());
}
}
}
答案 0 :(得分:3)
由于您要提取每行的数字值,我建议您查看Pattern
类。一段简单的代码,如下所示:
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));
}
将生成行中的所有数值:
1
201
202
203
203
204
208
204
本质上,该模式将寻找一个或多个重复的数字。当它找到它们时,它会将它们放在后来访问的组中。
答案 1 :(得分:1)
您也可以使用StringTokenizer类。代码简单如下:
import java.util.StringTokenizer;
公共类App { public static void main(String [] args){
String str = "1 (201, <202,203>), (203, <204,208>), (204, <>)";
StringTokenizer st = new StringTokenizer( str, " ,()<>" );
while ( st.hasMoreElements() ) {
System.out.println( st.nextElement() );
}
}
}
输出打印:
1 201 202 203 203 204 208 204
答案 2 :(得分:0)
1 (201, <202,203>), (203, <204,208>), (204, <>)
删除所有()
和<>
。然后使用split()
获取单个令牌,最后将其解析为integers
。
示例
String input = scanner.readLine(); // your input.
input = input.replaceAll("\\(\\)", "");
input = input.replaceAll("<>", "");
String[] tokens = input.split(",");
int[] values = new int[tokens.length];
for(int x = 0; x < tokens.length; x++)
{
values[x] = Integer.parseInt(tokens[x]);
}