如何在从文本文件中读取时找到类型值?

时间:2012-05-01 11:49:44

标签: java file file-io

我有一个文本文件,我需要找到读取行的文本文件类型。例如,我有一个这样的文本文件:

1
test
3.123123
13/21/13

我该如何区分这些类型。我需要在Java中编写控制台字符串,整数,日期或浮点数

5 个答案:

答案 0 :(得分:2)

您可以使用正则表达式。例如,如果它是所有数字(或减号/加号后跟数字),则为int。拥有每种类型的正则表达式并一个接一个地尝试它们。如果它不是int,看看它是不是浮点数;如果它不是浮动,看看它是否是一个日期;等等。如果所有检查都失败了,那就是一个字符串。

你也可以尝试尝试随机解析内容并查看不会引发异常的内容的强力方法,但这不是一个好主意。

答案 1 :(得分:1)

没有神奇的解决方案。您必须逐行解析和分析输入。

要区分整数,您可以使用

Integer.parseInt(s)除非抛出ParsingException,否则假设数据为Integer。关于Double也是如此。日期可能是一个问题,因为日期可以以不同的格式出现。

我认为在您的情况下,为了简化代码,最好使用模式:

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;

答案 2 :(得分:0)

你所要求的是不可能完美的。例如,问题中的3.123123可以是String,float或double。

您可能希望将看起来像double的所有内容转换为double,其他所有内容看起来像long到long,其他所有看起来像布尔值的布尔值,其他所有看起来像日期的日期,以及其他所有字符串。为此,我将使用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) {}

答案 3 :(得分:0)

我希望看到你到目前为止所做的尝试,或者什么行不通,或者你的思维过程是什么。

有几种方法可以解决这个问题而不用考虑它;其中一些正在使用正则表达式,使用instanceof或使用一些解析方法parseInt,parseLong等

答案 4 :(得分:0)

如果要实现完美的解决方案,则需要编写一个解析器,该解析器采用定义文本文件中可能出现的所有数据类型的语法。如果您不想匹配复杂的数据类型,即使是正则表达式匹配也会有所帮助。