我正在解析纯文本并尝试转换为Object。
文字看起来像(我无法更改格式):
"N001";"2014-08-12-07.11.37.352000";" ";"some@email.com ";4847 ;"street";"NAME SURNAME ";26 ;"CALIFORNIA ";21
和要转换的对象:
String index;
String timestamp;
String mail;
Integer zipCode
...
我试过了:
StringTokenizer st1 = new StringTokenizer(N001\";\"2014-08-12-07.11.37.352000\";\" \";\"some@email.com \";4847 ;\"street\";\"NAME SURNAME \";26 ;\"CALIFORNIA \";21);
while(st2.hasMoreTokens()) {
System.out.println(st2.nextToken(";").replaceAll("\"",""));
}
输出是正确的,我想有一个计数器并用一个案例bucle进行硬编码并将字段设置为反向计数器,但问题是我有40个字段......
有些想法?
非常感谢!
答案 0 :(得分:1)
String line = "N001";"2014-08-12-07.11.37.352000";" ";"some@email.com ";4847 ;"street";"NAME SURNAME ";26 ;"CALIFORNIA ";21
StringTokenizer st1 = new StringTokenizer(line, ";");
while(st2.hasMoreTokens()) {
System.out.println(st2.nextToken().replaceAll("\"",""));
}
或者您可以使用split方法并使用分隔符;
直接获取值数组
String []values = line.split(";");
然后迭代数组并按照你想要的方式获取和转换值
答案 1 :(得分:0)
无论您解析文件的方式如何,您都需要定义列到字段的映射(以及如何解析文本)。
如果这是一个CVS文件,你可以使用像super-csv这样的库。您需要做的就是编写映射定义。
答案 2 :(得分:0)
我首先根据分号分隔符拆分输入String
,然后清理值。
例如:
String input = "\"N001\";\"2014-08-12-07.11.37.352000\";\" " +
"\";\"some@email.com " +
"\";4847 ;\"street\";\"NAME " +
"SURNAME \";26 ;\"CALIFORNIA " +
"\";21 ";
// raw split
String[] split = input.split(";");
System.out.printf("Raw: %n%s%n", Arrays.toString(split));
// cleaning up whitespace and double quotes
ArrayList<String> cleanValues = new ArrayList<String>();
for (String s: split) {
String clean = s.replaceAll("[\\s\"]", "");
if (!clean.isEmpty()) {
cleanValues.add(clean);
}
}
System.out.printf("Clean: %n%s%n", cleanValues);
<强>输出强>
Raw:
["N001", "2014-08-12-07.11.37.352000", " ", "some@email.com ", 4847 , "street", "NAME SURNAME ", 26 , "CALIFORNIA ", 21 ]
Clean:
[N001, 2014-08-12-07.11.37.352000, some@email.com, 4847, street, NAMESURNAME, 26, CALIFORNIA, 21]
注意强>
为了将值映射到变量,您需要提前知道它们的索引,并且必须保持一致。
然后,您可以使用get(int i)
方法从List
中检索它们,例如cleanValues.get(2)
会给你发电子邮件等等。
注意(2)
如果你不提前知道指数或者它们可能会有所不同,那么你就麻烦了。 你当然可以尝试使用正则表达式来获取这些索引,但我怀疑你可能最终会使你的生活变得复杂。
答案 3 :(得分:0)
您可以使用Java Reflection自动执行流程。
迭代字段
Field[] fields = dummyRow.getClass().getFields();
并设置您的值
SomeClass object = construct.newInstance();
field.set(object , value);