2015-03-14 1 views
0

Я программирую одно приложение, которое собирает данные от JSON. И у меня есть одна строка, которая называется «opening_hours» из этой строки, мне нужно, чтобы получить информацию о каждом дне в неделю (я не знаю, как объяснить ...)Java - получить время открытия и закрытия для каждого дня из строки

Пример является: "Mon: 11:00 – 22:00 Tue: 11:00 – 22:00 Wed: 11:00 – 22:00 Thu: 11:00 – 5:00 Fri: 10:00 – 6:00 Sat: 11:00 – 6:00 Sun: 12:00 – 23:00"

И из этого примера, я должен получить 14 переменных или массив, который, например, будет выглядеть следующим образом:

[0]=> 11:00 
[1]=> 22:00 
[2]=> 11:00 
etc.. 

что было бы самым простым способом для достижения этой цели?

Заранее благодарен! И мне жаль - мой английский не очень хорош.

+0

Может ваш обеспечить некоторый код? Лучше выставить java-код. – hamed

ответ

0

Используйте регулярные выражения из пакета «java.util.regex». Это лучшее решение, если вы на 100% уверены, что String всегда будет использовать тот же формат.

Этот ответ не является лучшим местом для регулярных выражений учебник, так что посмотрим на Javadoc здесь:

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

и Java учебники на регулярных выражений здесь:

http://docs.oracle.com/javase/tutorial/essential/regex/index.html

+0

Хорошо, спасибо. Я уже думал, что регулярные выражения будут тем, чему я должен научиться. Я занимаюсь программированием всего лишь год, поэтому еще не научился регулярному выражению. – user3370505

+0

Если этот anwer является правильным для вас, попробуйте его и отметьте его как лучший ответ, чтобы другие знали, что это уже не проблема. – lodo

0

You мог бы сделать это, используя Pattern ru Matcher

String info = "Mon: 11:00 – 22:00 Tue: 11:00 – 22:00 Wed: 11:00 – 22:00 Thu: 11:00 – 5:00 Fri: 10:00 – 6:00 Sat: 11:00 – 6:00 Sun: 12:00 – 23:00"; 
    Pattern p = Pattern.compile("(5:00|6:00|10:00|11:00|12:00|22:00|23:00)"); 
    Matcher m = p.matcher(info); 
    List<String> theList = new ArrayList(); 
    while(m.find()) { 
     theList.add(m.group()); 
    } 
    theList.stream().forEach((item) -> { 
     System.out.print(item + ", "); 
    }); 

печатает: 11:00, 22:00, 11:00, 22:00, 11:00, 22:00, 11:00, 5:00, 10:00, 6:00, 11:00, 6:00, 12:00, 23:00

1

Вот быстрое решение:

private static enum WeekDay { 
    Mon, Tue, Wed, Thu, Fri, Sat, Sun 
} 

private static class DaySchedule { 
    WeekDay weekDay; 
    LocalTime startTime; 
    LocalTime endTime; 

    public DaySchedule(WeekDay weekDay, LocalTime startTime, LocalTime endTime) { 
     this.weekDay = weekDay; 
     this.startTime = startTime; 
     this.endTime = endTime; 
    } 

    @Override 
    public String toString() { 
     return weekDay + " : " + startTime + " - " + endTime; 
    } 
} 

public static void main(final String[] args) { 

    final String in = "Mon: 11:00 – 22:00 Tue: 11:00 – 22:00 Wed: 11:00 – 22:00 " + 
      "Thu: 11:00 – 5:00 Fri: 10:00 – 6:00 Sat: 11:00 – 6:00 Sun: 12:00 – 23:00"; 

    final Iterable<String> tokens = Splitter.on(" ").omitEmptyStrings().trimResults().split(in); 

    final Iterable<String> scheduleTokens = Iterables.filter(tokens, new Predicate<String>() { 
     @Override 
     public boolean apply(String input) { 
      return input.length() > 2; 
     } 
    }); 

    final DateTimeFormatter localTimeFormatter = DateTimeFormat.forPattern("HH:mm"); 
    final List<DaySchedule> schedule = Lists.newArrayList(); 

    final Iterator<String> it = scheduleTokens.iterator(); 

    while (it.hasNext()) { 
     final WeekDay day = WeekDay.valueOf(it.next().replaceAll(":", "")); 
     final LocalTime startTime = localTimeFormatter.parseLocalTime(it.next()); 
     final LocalTime endTime = localTimeFormatter.parseLocalTime(it.next()); 

     schedule.add(new DaySchedule(day, startTime, endTime)); 
    } 

    System.out.println(schedule); 
} 
Смежные вопросы