2 Stimmen

Warum ist nicht \\ in dieser Regex als schwarzer Schrägstrich interpretiert?

Ich lerne gerade, Javas Pattern und Matcher zu verwenden, und dies ist ein Beispiel-Code-Schnipsel in meinem Buch. Es funktioniert, wie der Autor beschreibt, aber was ich nicht verstehe, ist, warum \\. wird zu einem Punkt anstelle eines Backslashs (die \\ Teil) und einem Punkt (dem . Teil). Liest der Compiler nicht von links nach rechts?

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]);    
            }

   }
}

6voto

Matthew Flaschen Punkte 266507

Sie wird einmal beim Parsen des String-Literales und einmal vom Regex-Compiler interpretiert.

"\\." -> "\." - Stringliteral
"\." -> wörtlich . - Regex-Compiler

4voto

Ming-Tang Punkte 16979

Sie müssen doppelt aus dem "\\\\." Da Java das String-Literal interpretiert "\\." como \. was nicht das ist, was Sie erwarten. Versuchen Sie dies: System.out.println("\\.") und was Sie sehen, ist das, was Sie in der Regexp erhalten.

EDIT: Ihr Eingabe-String lautet "www.cs.cornell.edu" . Wissen Sie, was Sie da tun? Vielleicht versuchen Sie, durch den Punkt zu teilen ( \. ), dessen Java-Literal lautet "\\." wie Sie getippt haben.

Vielleicht versuchen Sie, einen BACKSLASH und dann einen DOT zu finden, was bedeutet, dass die Regex lautet \\\. , dessen Java-Literal lautet "\\\\\\."

0voto

Paul Gregoire Punkte 9530

Ihr Code kann ein wenig vereinfacht werden, etwa so:

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);
        }
    }
}

Der "doppelte Schrägstrich-Punkt" funktioniert in diesem Fall wie erwartet, aber die Formatierung auf Stackoverflow verlangt einen "vierfachen Schrägstrich-Punkt", was etwas seltsam ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X