«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».
Извините, если было недостаточно ясно.
Что не работает значит? – hwnd
Я пересмотрел свой пост, поэтому он более ясен. – wateraura
if (letter! = "" ... не сравнивать строки, подобные этому. Вы сравниваете только это, если это тот же строковый объект, который, вероятно, нет. Всегда. – Fildor