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

在使用Java读取文件时,如何从一行文本中提取名称和值?

在使用Java读取文件时,如何从一行文本中提取名称和值?,java,file,parsing,Java,File,Parsing,将从中的标准传入文件名。我想打开它,阅读它,并根据文件中的文本创建一些信息 例如,如果这是文件中的一行: 人力资源3 。。。然后我想创建一个名为Hristo的成员,其值为3。因此,我想提取一个字符串作为名称,一个int作为值。名称和值之间由未知数量的制表符和空格分隔,我需要忽略这些制表符和空格。我能读一下这行吗?用.trim去掉空格,最后一个字符就是值 为了简单起见,我没有显示类成员。这就是我到目前为止所做的: public static void main(String[] args) {

将从中的标准传入文件名。我想打开它,阅读它,并根据文件中的文本创建一些信息

例如,如果这是文件中的一行:

人力资源3

。。。然后我想创建一个名为Hristo的成员,其值为3。因此,我想提取一个字符串作为名称,一个int作为值。名称和值之间由未知数量的制表符和空格分隔,我需要忽略这些制表符和空格。我能读一下这行吗?用.trim去掉空格,最后一个字符就是值

为了简单起见,我没有显示类成员。这就是我到目前为止所做的:

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的正则表达式包吗?