Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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中的.txt文件中将多个字符串解析为变量。什么';这是最简单的方法吗?_Java_String_File_Parsing - Fatal编程技术网

我想从java中的.txt文件中将多个字符串解析为变量。什么';这是最简单的方法吗?

我想从java中的.txt文件中将多个字符串解析为变量。什么';这是最简单的方法吗?,java,string,file,parsing,Java,String,File,Parsing,最好的方法是什么?我应该使用文件类和扫描程序吗?我以前从未做过,而且似乎在网上找不到可靠的指南,所以我想我会在这里问一下 编辑: 我正在解析的文本文件有3列,前三列是ID NAME BIRTHDATE,然后是实际数据 编辑(源代码): public void readFromFile(文件) { 尝试 { System.out.println(“成功…”); s=新扫描仪(文件); BufferedReader输入=新BufferedReader(新文件读取器(文件)); 字符串jj=null;

最好的方法是什么?我应该使用文件类和扫描程序吗?我以前从未做过,而且似乎在网上找不到可靠的指南,所以我想我会在这里问一下

编辑:

我正在解析的文本文件有3列,前三列是ID NAME BIRTHDATE,然后是实际数据

编辑(源代码):

public void readFromFile(文件)
{
尝试
{
System.out.println(“成功…”);
s=新扫描仪(文件);
BufferedReader输入=新BufferedReader(新文件读取器(文件));
字符串jj=null;
而((jj=input.readLine())!=null)
{  
字符串[]字=jj.split(\\t”);
字符串名称=”;
字符串id=“”;
字符串birthdate=“”;

对于(int i=3;i如果您可以自由地说出文本文件的语法/结构,那么考虑将其作为java属性文件。然后可以使用类的最小编程努力加载和保存文件。

如果您可以自由地说出文本文件的语法/结构,那么考虑将其作为java属性文件。然后,您可以使用该类以最少的编程工作量加载和保存该文件。

最简单的方法取决于文本文件的格式。从您的其他注释来看,这些行听起来像是制表符分隔的值。作为初学者,您可能会发现使用Scanner最简单。具体来说,Scanner.nextLine()。将其与使用String.split(“\t”)将数据拆分为数组(假设格式为制表符分隔的值)相耦合.

最简单的方法取决于文本文件的格式。从您的其他评论来看,这些行听起来像是制表符分隔的值。作为初学者,您可能会发现使用Scanner最简单。具体来说,Scanner.nextLine()。将其与String.split(“\t”)结合使用,将数据拆分为一个数组(假设格式为制表符分隔值)。

仅取决于文本文件的格式

  • 如果它是简单的名称-值对,则可以使用java.util.Properties。例如,a.Properties可以如下所示:

    name=john
    city=san jose
    date=12 july 2010
    
  • 然后您可以将其加载为:

    Properties props = new Properties();
    props.load(new FileInputStream("a.properties"));
    
  • 如果格式不同于java.util.Properties.load()所支持的格式,那么使用java.util.Scanner将有助于逐行处理它:

    File file = new File("data.txt");
    try 
    {
        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) 
        {
            String line = scanner.nextLine();
            //Process each line seperately
            processLine(line);
        }
    } catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
    

  • 只取决于文本文件的格式

  • 如果它是简单的名称-值对,则可以使用java.util.Properties。例如,a.Properties可以如下所示:

    name=john
    city=san jose
    date=12 july 2010
    
  • 然后您可以将其加载为:

    Properties props = new Properties();
    props.load(new FileInputStream("a.properties"));
    
  • 如果格式不同于java.util.Properties.load()所支持的格式,那么使用java.util.Scanner将有助于逐行处理它:

    File file = new File("data.txt");
    try 
    {
        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) 
        {
            String line = scanner.nextLine();
            //Process each line seperately
            processLine(line);
        }
    } catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
    

  • 在这种情况下,我喜欢这样做:

    Scanner s = new Scanner(file);
    Scanner line;
    String name;
    String date;
    int id;
    while(s.hasNext()){
       line = new Scanner(s.nextLine());
       id = line.nextInt();
       name = line.next/*String*/();
       date = line.next/*String*/();
       /* Do something with id, name and date */
    }
    
    可能有一些异常处理之类的


    (有人想对创建许多新扫描仪的效率发表评论吗?

    在这种情况下,我喜欢这样做:

    Scanner s = new Scanner(file);
    Scanner line;
    String name;
    String date;
    int id;
    while(s.hasNext()){
       line = new Scanner(s.nextLine());
       id = line.nextInt();
       name = line.next/*String*/();
       date = line.next/*String*/();
       /* Do something with id, name and date */
    }
    
    可能有一些异常处理之类的


    (有人想评论创建许多新扫描仪的效率吗?)

    它分为3列,带有样本名称、ID和出生率变量。我将查看api上的properties类,但我认为我的实验室鼓励我使用File、scanner和Print Writer。@Cody-properties文件格式不适用于您的用例。它分为3列,带有样本名称、ID和出生率变量。我将进行look在api上的属性类,但我认为我的实验室鼓励我使用文件、扫描仪和打印编写器。@Cody-properties文件格式不适用于您的用例。谢谢,我会看看我能想出什么。这就是我的位置。我在获取“添加到文件中的新人”时遇到了问题sysout.PeopleMap是我的树状图,names是我的arrayList。它们已经包含了一些值,这部分工作正常。@Cody,对不起。您的评论不是很友好的StackOverflow。如果您有其他问题或需要发布澄清(例如输入格式或代码段)您应该编辑原始问题。谢谢,我会看看我能想出什么。这是我的位置。我在获取“新添加到文件中的人”时遇到问题sysout.PeopleMap是我的树状图,names是我的arrayList。它们已经包含了一些值,这部分工作正常。@Cody,对不起。您的评论不是很友好的StackOverflow。如果您有其他问题或需要发布澄清(例如输入格式或代码段)你应该编辑原始问题。这是我目前的代码,我在打印新条目t控制台消息时遇到困难。有什么想法吗?我使用了文件。这是我目前的代码,我在打印新条目t控制台消息时遇到困难。有什么想法吗?我使用了文件。我的代码到目前为止……似乎无法创建新的人文本fi我正在解析的是3列,前三列是ID名称生日,然后是实际数据。我认为我的解析是正确的,我做了很多打印测试。到目前为止我的代码是……似乎无法创建新的人我正在解析的文本文件是3列,前三列是ID名称生日,然后是实际数据。我认为我的解析是正确的,我没有使用打印进行测试的ots。嗯……创建额外的扫描仪完全没有必要,因为您可以简单地调用原始文件上的
    nextInt(),next(),next()
    。此外,如果有人的名字由两部分组成,如“Jim Bob”?使用
    next()
    并不能真正处理这种情况。好吧……创建额外的扫描仪完全没有必要,因为您可以简单地在原稿上调用
    nextInt(),next(),next()
    。另外,如果有人的名字由两部分组成,比如“Jim Bob”,该怎么办?使用
    next()
    并不能真正处理这种情况。