在使用Java读取文件时,如何从一行文本中提取名称和值?
将从中的标准传入文件名。我想打开它,阅读它,并根据文件中的文本创建一些信息 例如,如果这是文件中的一行: 人力资源3 。。。然后我想创建一个名为Hristo的成员,其值为3。因此,我想提取一个字符串作为名称,一个int作为值。名称和值之间由未知数量的制表符和空格分隔,我需要忽略这些制表符和空格。我能读一下这行吗?用.trim去掉空格,最后一个字符就是值 为了简单起见,我没有显示类成员。这就是我到目前为止所做的:在使用Java读取文件时,如何从一行文本中提取名称和值?,java,file,parsing,Java,File,Parsing,将从中的标准传入文件名。我想打开它,阅读它,并根据文件中的文本创建一些信息 例如,如果这是文件中的一行: 人力资源3 。。。然后我想创建一个名为Hristo的成员,其值为3。因此,我想提取一个字符串作为名称,一个int作为值。名称和值之间由未知数量的制表符和空格分隔,我需要忽略这些制表符和空格。我能读一下这行吗?用.trim去掉空格,最后一个字符就是值 为了简单起见,我没有显示类成员。这就是我到目前为止所做的: public static void main(String[] args) {
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();
}
}
我将如何解析这行文本
提前感谢您的帮助。看起来像是家庭作业。你差一点就做到了。使用StringTokenizer标记行。然后为这两个属性创建一个新的成员对象和调用设置器,并将标记作为参数。如果您的第二个属性是int,请使用parseInt转换并分配它。看起来像是一个家庭作业。你差一点就做到了。使用StringTokenizer标记行。然后为这两个属性创建一个新的成员对象和调用设置器,并将标记作为参数。如果第二个属性是int,请使用parseInt转换并分配它。我将使用split函数。 可以给它一个正则表达式作为参数 i、 e 将返回示例中单词{list[0]=Hristo,list[1]=3}的数组
希望有帮助。我会使用split函数。 可以给它一个正则表达式作为参数 i、 e 将返回示例中单词{list[0]=Hristo,list[1]=3}的数组
希望能有所帮助。使用split\\s+,此正则表达式忽略字符串中的任何空格、制表符等。使用split\\s+,此正则表达式忽略字符串中的任何空格、制表符等。一种更健壮的方法可能是使用正则表达式;如果您收到格式错误的输入,例如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
}
更可靠的方法可能是使用正则表达式;如果您收到格式错误的输入,例如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
}
这不是家庭作业。。。事实上,这是我试图解决的Facebook难题。另外,你可以发布一些代码。。。我从未使用过StringTokenizer。这不是家庭作业。。。事实上,这是我试图解决的Facebook难题。另外,你可以发布一些代码。。。我从未使用过StringTokenizer。啊,太好了。在你回答之前,我刚刚调查了斯普利特。这里唯一的问题是潜在的分裂成许多元素。因此,它可能不仅仅是名称和值为2,而更多的是空值。我该如何克服这一点。。。看看有没有?是的。那就行了。谢谢啊,太好了。在你回答之前,我刚刚调查了斯普利特。这里唯一的问题是潜在的分裂成许多元素。因此,它可能不仅仅是名称和值为2,而更多的是空值。我该如何克服这一点。。。看看有没有?是的。那就行了。谢谢我不太明白正则表达式是怎么工作的。。。\\s+在说什么?它说忽略从字符串到splitCool的所有空格。你从哪里弄来的?某个地方有类似于java的正则表达式包吗?我不太明白正则表达式是如何工作的。。。\\s+在说什么?它说忽略从字符串到splitCool的所有空格。你从哪里弄来的?某个地方有类似于java的正则表达式包吗?