2012-05-01 1 views
2

У меня есть текстовый файл, и мне нужно найти тип текстовых файлов чтения line.For примера У меня есть текстовый файл, как это:Как найти значение типа при чтении из текстового файла?

1 
test 
3.123123 
13/21/13 

как я могу отличить эту types.I нужно написать консольную строку , integer, date или float в Java

+2

Как был создан этот текстовый файл? –

ответ

2

Вы можете использовать регулярные выражения. Например, если все цифры (или знак минус/плюс с цифрами), это int. Имейте регулярное выражение для каждого из типов и попробуйте их один за другим. Если это не int, посмотрите, является ли это float; если это не поплавок, посмотрите, есть ли дата; и так далее. если все проверки терпят неудачу, это строка.

Вы можете также попытаться применить грубую силу, пытаясь случайным образом разобрать материал и посмотреть, что не исключает, но это не очень хорошая идея.

+0

Я сделал это с pregmatch, и не сложно это сделать, спасибо, сэр. –

0

То, о чем вы просите, невозможно сделать отлично. Например, 3.123123 в вопросе может быть строкой, поплавком или двойным.

Возможно, вы захотите преобразовать все, что похоже на двойное на двойное, все остальное, которое выглядит как длинное и длинное, все остальное, которое выглядит как логическое для булевого, все остальное, которое выглядит как дата для дату и все остальное в строку. Для этого я бы использовал BufferedReader.readLine или Scanner.next (чтобы разделить на пробелы, вкладки и т. Д., А также строки новой строки), чтобы прочитать следующее, а затем статические методы, такие как Long.parseLong в try ... catch блок для обнаружения ошибок синтаксического анализа (т. е. когда он не выглядит длинным). Пример:

0

Я хотел бы посмотреть, что вы пробовали до сих пор, или что не работает, или каким был ваш процесс мышления.

Существует несколько способов решить эту проблему, не задумываясь об этом; некоторые из которых используют регулярное выражение, используя instanceof или используя некоторые из методов анализа parseInt, parseLong и т. д.

1

Нет волшебного решения. Вы должны анализировать и анализировать ваши строки за строкой.

Чтобы отличить Integer вы можете использовать

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; 
0

Если вы хотите реализовать идеальное решение, вам нужно написать парсер, который принимает грамматику, которая определяет все типы данных, которые могут отображаться в текстовом файле. Даже совпадение регулярных выражений поможет, если вы не хотите сопоставлять сложные типы данных.

Смежные вопросы