2014-11-12 2 views
0

«01:23:45 Информатика - это потрясающе! 10:11:59 Мне нравится ICE CREAM». это то, что должно соответствовать этому регулярному выражению.Java - проблема с регулярным выражением, перекрывающая данные

Это регулярное выражение я использую:

"(\ d \ d: \ d \ d: \ d \ d) (. +) \ S \ s" Хотя это не работает ... может кто-то, пожалуйста, помогите мне.

Позвольте мне указать, что мне нужно сделать

import java.util.regex.*; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
public class Friendly { 
    public static void main(String[] arguments) throws IOException{ 
     String input = new BufferedReader(new InputStreamReader(System.in)).readLine(); 
     Pattern regex = Pattern.compile("(\\d\\d:\\d\\d:\\d\\d)\\s(.+)(?=\\s|$)"); 
     Matcher match; 
     boolean first = true; 
     while ((match = regex.matcher(input)).find()){ 
      if (!first) 
       System.out.println(); 
      else first = !first; 
      System.out.print(match.group(1) + " "); 
      String[] timestamp = match.group(1).split(":"); 
      int hour = Integer.parseInt(timestamp[0]) * 9; 
      int minutes = Integer.parseInt(timestamp[1]) * 3 + Integer.parseInt(timestamp[2]); 
      boolean isOdd = false; 
      String[] letters = match.group(2).split(""); 
      for (int index = 0; index < letters.length; index++){ 
       String letter = letters[index]; 
       if (letter != " " && letter.length() > 0){ 
        System.out.printf("0x%02X" + (index == letters.length - 1 ? "" : " "), letter.charAt(0)^(isOdd ? minutes : hour) & 0xFF); 
        isOdd = !isOdd; 
       } 
      } 
      input = input.substring(input.indexOf(match.group(0)) + 1, input.length()); 
     } 
    } 
} 

В этом коде я пытаюсь разобрать «1:23:45 Компьютерные науки является удивительным!» затем получите «10:11:59 Мне нравится ICE CREAM».

Извините, если было недостаточно ясно.

+1

Что не работает значит? – hwnd

+0

Я пересмотрел свой пост, поэтому он более ясен. – wateraura

+0

if (letter! = "" ... не сравнивать строки, подобные этому. Вы сравниваете только это, если это тот же строковый объект, который, вероятно, нет. Всегда. – Fildor

ответ

1
(\d\d:\d\d:\d\d(?:(?!\d\d:\d\d:\d\d).)+) 

Try this.See demo.

http://regex101.com/r/tF5fT5/42

+0

Хотя, когда я использую это, он захватывает 01:23:45 10:11:59 Мне нравится ICE CREAM. Мне нужно это, чтобы захватить «01:23:45 Компьютерные науки - это потрясающе!» Жаль, что я не был конкретным, потому что в моем коде я разбираю строка и повторно применить регулярное выражение. – wateraura

+0

@ user2481296 попробуйте сейчас – vks

+0

Это все еще ошибки с моим кодом. – wateraura

0

Вы забыли позаботиться о прекращении текста.

Попробуйте это:

\d\d:\d\d:\d\d\s.+\d\d:\d\d:\d\d\s.+ 
Смежные вопросы