I have a text file and I need to find type of text files reading line.For example I have a text file like this:
1
test
3.123123
13/21/13
how can i do distinguish this types.I need to write console String, integer, date or float in Java
你可以使用正则表达式。例如,如果它都是数字(或减号/加号后跟数字),则它是一个 int。对每种类型都有一个正则表达式,然后一个接一个地尝试它们。如果不是int,看看是不是float;如果不是浮点数,请查看是否为日期;等等。如果所有检查都失败,则它是一个字符串。
您还可以尝试尝试随机解析内容并查看不引发异常的蛮力方法,但这不是一个好主意。
没有神奇的解决方案。您必须逐行解析和分析您的输入。
要区分整数,您可以使用
Integer.parseInt(s)
除非抛出 ParsingException,否则假定数据是整数。双倍也是如此。日期可能是一个问题,因为日期可以以不同的格式出现。
我认为在您的情况下,为了简化代码,最好使用模式:
Pattern[] patterns = Pattern[] {Pattern.compile("^\\d+$"), Pattern.compile("^\\d+\\.\\d*$"), Pattern.compile("^\\d{1,2}/\\d{1,2}/\\d{1,2}$")};
Class<?> types = new Class[] {Integer.class, Double.class, Date.class};
for (int i - 0; i < patterns.length; i++) {
if (patterns[i].matches(str)) {
return types[i];
}
}
return null;
你所要求的不可能做到完美。例如,3.123123
问题中可以是字符串、浮点数或双精度数。
您可能希望将所有看起来像 double 的东西转换为 double,其他所有看起来像 long 的东西转换为 long,其他所有看起来像 boolean 的东西转换为 boolean,其他所有看起来像 date 的东西,以及一切否则为字符串。为此,我会使用 BufferedReader.readLine 或 Scanner.next (在空格、制表符等以及换行符上拆分)来读取下一件事,然后在 try...catch 中使用 Long.parseLong 等静态方法块来检测解析错误(即当它看起来不长时)。例子:
String thing = bufferedReader.readLine();
long longValue;
boolean looksLikeALong = false;
try {
longValue = Long.parseLong(thing);
looksLikeALong = true;
} catch (NumberFormatException e) {}
我想看看你到目前为止尝试了什么,或者什么不起作用,或者你的思考过程是什么。
有几种方法可以解决这个问题,而无需深思熟虑;其中一些正在使用正则表达式,使用 instanceof 或使用一些解析方法 parseInt、parseLong 等
如果您想实现一个完美的解决方案,您需要编写一个解析器,该解析器采用定义文本文件中可能出现的所有数据类型的语法。如果您不想匹配复杂的数据类型,即使是正则表达式匹配也会有所帮助。