用分隔符插入字符串



我正在CSV文件中阅读副总统的姓名和年龄。我遇到的问题是试图在一个空格和一个句点上拆分字符串。

import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
public class VicePresidents {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String filename = "VicePresidentAges.csv";
File file = new File(filename);
Scanner infile = new Scanner(file);
ArrayList<String> names = new ArrayList<String>();
ArrayList<Integer> ages = new ArrayList<Integer>();

while (infile.hasNext())
{
String line = infile.nextLine();
String[] tokens = line.split("[" ".]");

System.out.println(tokens[0]);
//put the tokens into their correct ArrayList
}

infile.close();

我在分割线上收到一条错误消息。奇怪的是,如果我用逗号分隔,我得到的输出是正确的,除了名字是这样的:ï»?John Adams。让我困惑的是,文件中没有任何逗号,这就是为什么我试图在空格和句点(中间首字母(上进行拆分。不理解在文件中使用没有逗号的逗号是如何工作的。我的书中使用了两个分隔符作为("[@.]"(。但当我尝试做line.split("[".](时;我得到一个错误";标记"上的语法错误".]";,删除该令牌"*已对其进行编辑,以便根据请求包含错误消息。这个可以重新打开吗?

不太确定它到底是你想要的:这将分割有空格或点的行:

String[] tokens = line.split("[ .]");

感谢Arvind Kumar Avinash的编辑:虽然正则表达式中的点通常需要用反斜杠转义,但这在方括号内是不必要的。对于一个简单的演示:

String line = "John Adams 53";
String[] tokens = line.split("[ .]");
System.out.println(Arrays.toString(tokens));

该输出:

[John,Adams,53]

出了什么问题Java将其作为两个字符串:"[" ".]"。(1("["是一个字符串。(2(".]"是另外一个字符串。由于在Java语法中,您不能在字符串之后立即再放一个字符串,因此Eclipse建议您删除第二个字符串(这显然不是您想要解决错误的方式(。

user15358848补充道:文件开头的有趣字符看起来很像WIndows应用程序喜欢用来指示文件是UTF-8格式的BOM(字节顺序标记(-尝试不使用UTF-8 CSV文件类型保存CSV(或者检查前2个字节并忽略(。

设计提示:将名称放在一个ArrayList中,将年龄放在另一个中是一种糟糕的设计。相反,我建议您创建一个Vicepresident类或仅创建一个带有名称和年龄实例变量(字段(的Person类,并且只创建一个此类对象的ArrayList。在您的进一步处理中,它将更易于管理。链接:反模式:并行集合。

相关问题:用"."(点([重复]拆分Java字符串。

最新更新