2

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

4

5 回答 5

2

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

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

于 2012-05-01T11:55:29.770 回答
1

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

要区分整数,您可以使用

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;
于 2012-05-01T11:56:59.437 回答
0

你所要求的不可能做到完美。例如,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) {}
于 2012-05-01T11:54:46.407 回答
0

我想看看你到目前为止尝试了什么,或者什么不起作用,或者你的思考过程是什么。

有几种方法可以解决这个问题,而无需深思熟虑;其中一些正在使用正则表达式,使用 instanceof 或使用一些解析方法 parseInt、parseLong 等

于 2012-05-01T11:55:44.373 回答
0

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

于 2012-05-01T12:11:10.653 回答