我想从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()
并不能真正处理这种情况。