在调用构造函数创建对象之前,我需要将输入数据解析为4个不同的参数,如下面的格式。有什么想法吗?
样本数据输入格式:
rawdata = "900,300,Ernest,Fuller\n777,555,Henry,Miller\n"; //and so on
class BaseRecord {
int callerId;
int areaId;
String firstName;
String lastName;
BaseRecord (int cId, int aId, String fName, String lName)
callerId = cId;
areaId = aId;
firstName = fName;
lastName = lName;
}
答案 0 :(得分:3)
使用Matcher
包中的java.util.regex
:
String rawdata = "900,300,Ernest,Fuller\n777,555,Henry,Miller\n";
Matcher m = Pattern.compile("(\\d+),(\\d+),(\\w+),(\\w+)", Pattern.DOTALL).matcher(rawdata);
while(m.find()){
int cId = Integer.parseInt(m.group(1));
int aId = Integer.parseInt(m.group(2));
String fName = m.group(3);
String lName = m.group(4);
// your logic here
new BaseRecord (int cId, int aId, String fName, String lName);
}
通过这种方式,您可以拥有多个换行符并阻止NumberFormatException
上的parseInt
答案 1 :(得分:1)
如果你仍然不确定到目前为止给出的帮助还有一点。在新行上拆分原始数据。然后拆分结果数组的每个元素以获得您正在寻找的4个参数。 E.g。
String rawdata = "900,300,Ernest,Fuller\n777,555,Henry,Miller\n";
String[] records = rawdata.split("\n");
List<BaseRecord> baseRecords = new ArrayList<BaseRecord>();
for (String record: records) {
String [] recordData = record.split(",");
baseRecords.add(new BaseRecord(Integer.parseInt(recordData[0]), Integer.parseInt(recordData[1]), recordData[2], recordData[3]));
}
现在您有一个BaseRecord对象列表。这假设所有数据都是按照您的示例中所示形成的。
答案 2 :(得分:-1)
String s = new String("a,b,c");
String[] split = s.split(",");