【发布时间】:2019-02-07 07:24:36
【问题描述】:
我正在尝试从文本文件中读取并将其分成三个不同的类别。 ID、地址和重量。但是,每当我尝试访问地址和权重时,都会出错。有人看到问题了吗?
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.*;
class Project1
{
public static void main(String[] args)throws Exception
{
List<String> list = new ArrayList<String>();
List<String> packages = new ArrayList<String>();
List<String> addresses = new ArrayList<String>();
List<String> weights = new ArrayList<String>();
//Provide the file path
File file = new File(args[0]);
//Reads the file
BufferedReader br = new BufferedReader(new FileReader(file));
String str;
while((str = br.readLine()) != null)
{
if(str.trim().length() > 0)
{
//System.out.println(str);
//Splits the string by commas and trims whitespace
String[] result = str.trim().split("\\s*,\\s*", 3);
packages.add(result[0]);
//ERROR: Doesn't know what result[1] or result[2] is.
//addresses.add(result[1]);
//weights.add(result[2]);
System.out.println(result[0]);
//System.out.println(result[1]);
//System.out.println(result[2]);
}
}
for(int i = 0; i < packages.size(); i++)
{
System.out.println(packages.get(i));
}
}
}
这是文本文件(格式是故意的):
,123-ABC-4567, 15 W. 15th St., 50.1
456-BgT-79876, 22 Broadway, 24
QAZ-456-QWER, 100 East 20th Street, 50
Q2Z-457-QWER, 200 East 20th Street, 49
678-FGH-9845 ,, 45 第五大道,, 12.2,
678-FGH-9846,45 第五大道,12.2
123-A BC-9999, 46 Foo Bar, 220.0
347-poy-3465, 101 B'way,24
,123-FBC-4567, 15 West 15th St., 50.1
678-FGH-8465 45 5th Ave 12.2
【问题讨论】:
-
在文本文件的某些行中,有一个逗号会造成问题。
-
您在
\\s*,\\s*上拆分,但在最后一行678-FGH-8465 45 5th Ave 12.2中没有逗号。 -
您的第一行和倒数第二行有一个额外的逗号,这会造成问题。此外,有些行有两个
,,逗号,因此您将再次遇到问题,最后一行似乎没有任何逗号,因此您需要修复多个数据问题,而且在拆分方法中,您不需要指定第二个参数,而是使用更好的正则表达式来获取所有值。 -
文本文件应该有多个逗号。那么有没有人知道一种方法来访问每个部分?
-
如果您的数据无法更改并保持原样,您应该使用能够智能捕获数据的良好正则表达式。
标签: java regex arraylist split filereader