Найдите тип содержания (число, дата, время, представьте в виде строки и т.д.) в строке

Массив может быть инициализирован при помощи new Object {} синтаксис.

, Например, массив String может быть объявлен также:

String[] s = new String[] {"One", "Two", "Three"};
String[] s2 = {"One", "Two", "Three"};

Примитивы могут также быть так же инициализированы любой:

int[] i = new int[] {1, 2, 3};
int[] i2 = {1, 2, 3};

Или массив приблизительно Object:

Point[] p = new Point[] {new Point(1, 1), new Point(2, 2)};

Все подробности о массивах в Java выписан в Глава 10: Массивы в Спецификации языка Java, Третий Выпуск .

5
задан Jasim 12 September 2009 в 20:26
поделиться

2 ответа

require 'time'

def to_something(str)
  if (num = Integer(str) rescue Float(str) rescue nil)
    num
  elsif (tm = Time.parse(str)) == Time.now
    # Time.parse does not raise an error for invalid input
    str
  else 
    tm
  end
end

%w{12012 1233.22 12:21:22 10/10/2009 Test}.each do |str|
  something = to_something(str)
  p [str, something, something.class]
end

Результаты в

["12012", 12012, Fixnum]
["1233.22", 1233.22, Float]
["12:21:22", Sat Sep 12 12:21:22 -0400 2009, Time]
["10/10/2009", Sat Oct 10 00:00:00 -0400 2009, Time]
["Test", "Test", String]

Обновление для ruby ​​1.9.3: класс Time в stdlib теперь выдает исключение, если он не может проанализировать строку, поэтому:

def to_something(str)
  duck = (Integer(str) rescue Float(str) rescue Time.parse(str) rescue nil)
  duck.nil? ? str : duck
end
8
ответ дан 14 December 2019 в 01:12
поделиться

Это может помочь вам начать работу

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

$ irb
>> t = { "String" => "string", "Fixnum" => "integer", "Float" => "float" }
=> {"Float"=>"float", "Fixnum"=>"integer", "String"=>"string"}
>> ["xyz", 123, 123.455].map { |x| t[x.class.to_s] }
=> ["string", "integer", "float"]

Фактически, вы можете напрямую сопоставить классы:

$ irb
>> t = { String => "string", Fixnum => "integer", Float => "float" }
=> {String=>"string", Float=>"float", Fixnum=>"integer"}
>> ["xyz", 123, 123.455].map { |x| t[x.class] }
=> ["string", "integer", "float"]
1
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: