文件名将从标准输入传入。我想打开它,读取它,并根据文件中的文本创建一些信息。
例如,如果这是文件中的一行:
Hristo 3
...然后我想创建一个名为Hristo的Member()
,其值为3.所以我想为名称提取String
,为值提取int
。名称和值由一些未知数量的选项卡和空格分隔,我需要忽略它们。我可以只读取该行,使用.trim()来删除空格,最后一个字符是值吗?
为简单起见,我没有显示类Member()。这就是我到目前为止所做的:
public static void main(String[] args) {
int numMembers = 0;
ArrayList<Member> veteranMembers = new ArrayList<Member>();
File file = new File(args[0]);
FileReader fr;
BufferedReader br;
// attempt to open and read file
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
String line;
// read file
while ((line = br.readLine()) != null) {
// extract name and value from line
... ? ...
// create member
// initialize name and value
Member member = new Member();
veteranMembers.add(member);
}
br.close();
} catch (FileNotFoundException e1) {
// Unable to find file.
e1.printStackTrace();
} catch (IOException e) {
// Unable to read line.
e.printStackTrace();
}
}
我该如何解析那行文字?
提前感谢您的帮助。
答案 0 :(得分:3)
我会使用split函数。 你可以给它一个正则表达式作为参数 即
line.split(" |\t");
将返回单词的数组({list [0] = Hristo,list [1] = 3}在你的例子中) 希望它有所帮助。
答案 1 :(得分:2)
使用split("\\s+")
,此正则表达式忽略字符串中的任何空格,制表符等。
答案 2 :(得分:2)
更强大的方法可能是使用正则表达式;如果您收到格式错误的输入(例如,“Ted One”),parseInt()将抛出NumberFormatException。
import java.util.regex.*;
...
Pattern p = Pattern.compile("^(.*)\\s+(\\d+)$"); // Create a regex Pattern that only matches (text - white space - integer)
Matcher m = p.matcher(line); // Create a Matcher to test the input line
if(m.find()){
// If there's a match, ..
String name = m.group(1); // Set "name" to the first parenthesized group
String value = m.group(2); // Set "value" to the second parenthesized group
}
else{
// Bad Input
}
答案 3 :(得分:0)
看起来像家庭作业。你来得非常接近。使用StringTokenizer
标记line
。然后创建一个新的成员对象,并使用标记作为参数调用这两个属性的setter。如果您的第二个属性是int
,请使用parseInt
进行转换并分配。