Почему в этом регулярном выражении \\ не интерпретируется как черная косая черта? - PullRequest
2 голосов
/ 04 сентября 2010

Я учусь использовать Java Pattern и Matcher, и это пример кода в моей книге. Это работает, как описывает автор, но я не понимаю, почему \\. оказывается точкой вместо обратной косой черты (часть \\) и точки (часть.) Разве компилятор не читает слева направо?

import java.util.regex.*;
public class SplitTest {
   public static void main(String[] args)  {
       String input= "www.cs.cornell.edu";                          

      Pattern p = Pattern.compile("\\.");
      String pieces[] = p.split(input);
      for (int i=0; i<pieces.length; i++){
            System.out.println(pieces[i]);    
            }



   }
}

Ответы [ 3 ]

6 голосов
/ 04 сентября 2010

Он интерпретируется один раз при разборе строкового литерала и один раз компилятором регулярных выражений.

"\\." -> "\." - строковый литерал
"\." -> литерал . - компилятор регулярных выражений

4 голосов
/ 04 сентября 2010

Вы должны дважды экранировать строковый литерал. "\\\\." Потому что Java интерпретирует строковый литерал "\\." как \., а это не то, что вы ожидаете. Попробуйте это: System.out.println("\\."), и вы увидите то, что вы получите в регулярном выражении.

РЕДАКТИРОВАТЬ: Ваша строка ввода "www.cs.cornell.edu". Ты знаешь, что ты делаешь? Возможно, вы пытаетесь разделить на точку (\.), для которой ее Java-литерал равен "\\.", как вы ввели.

Может быть, вы пытаетесь сопоставить BACKSLASH, а затем DOT, что означает, что его регулярное выражение равно \\\., а его Java-литерал равен "\\\\\\."

0 голосов
/ 04 сентября 2010

Ваш код можно немного упростить, например, так: public class SplitTest { public static void main(String[] args) { String input = "www.cs.cornell.edu"; String[] pieces = input.split("\\."); for (String piece : pieces) { System.out.println(piece); } } } В этом случае «период двойной косой черты» работает так же, как и ожидалось, но форматирование в stackoverflow требует «периода четырехкратной обратной косой черты», что довольно странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...