Operatoren | - Operator

chaostheory

Bekanntes Mitglied
Hallo,
bei einem Programm für Wake-On-Lan bin ich auf folgende Zeile gestoßen, die den String einer Mac-Adresse in die einzelenen byte-Abschnitte teilen soll:
Java:
String[] hex = macStr.split("(\\:|\\-)");
Der split-Befehl ist mir bekannt, aber wofür ist der |-Operator (Hat der vielleicht auch einen Namen, damit ich den mal ordentlich benennen kann?)? Und welche Funktion haben die vorgesetzten Slashes(\\)?

Hier ist die vollständige Klasse für weitere Infos.
 

Bile Demon

Bekanntes Mitglied
Das | nennt sich üblicherweise "Pipe". Ist aber in dem Fall kein Operator, sondern gehört einfach zum String.

Lies dich am besten mal in Regexp ein.

Edit: Der reguläre Ausdruck bedeutet wohl in dem Fall, dass er sowohl bei einem Doppelpunkt als auch bei einem Bindestrich splittet.
 
Zuletzt bearbeitet:

Mujahiddin

Top Contributor
Wenn du dich näher damit auseinandersetzen willst, würde ich vorschlagen, dass du dir Pattern (Java 2 Platform SE v1.4.2) durchliest (oder überfliegst) - da steht z.B:
Code:
X|Y 	   Either X or Y
Was mich ein wenig stutzig macht, ist, dass ein einfacherer Regex das gleiche machen würde:
Code:
:|-
 
H

hüteüberhüte

Gast
Code:
[:-]
? (Soll kein lustiges Emoticon sein^^)
 

Mujahiddin

Top Contributor
Ja, zu der Frage, was "\\X" bedeutet: "\\" escaped einen Charakter, also zitiert den nächsten char.
Eigentlich ist das ein einfach "\", aber da du dich in Java-Code befindest, musst du "\" escapen und somit wird daraus ein "\\".
Du könntest damit z.B. "|" escapen, indem du "\\|" benutzt. In dem Beispiel müssen diese zwei chars nicht escaped werden. Der Entwickler wusste das wahrscheinlich nicht, beim "-" hatte er wohl übersehen, dass das nur zwischen Chargruppen escaped werden muss, also
Code:
[\\-]
wobei man das in diesem Fall nicht escapen muss, man würde aber sichergehen, das man am Ende nicht sowas drinstehen hat:
Code:
[:-|]
, der Fehler wäre schwer zu finden.

":" muss, soweit ich weiß, nie escaped werden. Verwendet wird das Zeichen nur in non-capturing groups:
Code:
(?:X)
 
H

hüteüberhüte

Gast
Grundsätzlich muss
Code:
<([{\^-=$!|]})?*+.>
escaped werden. Ich habe dazu mal eine Methode geschrieben:

Java:
    public static String getRegex(String s) {
        Matcher m = Pattern.compile("[\\Q<([{\\^-=$!|]})?*+.>\\E]").matcher(s);
        StringBuilder sb = new StringBuilder();
        int start = 0;
        while (m.find()) {
            sb.append(s.substring(start, m.start()));
            sb.append("\\\\");
            sb.append(m.group());
            start = m.end();
        }
        sb.append(s.substring(start, s.length()));
        return sb.toString().replaceAll("\n", "\\\\n").replaceAll("\"", "\\\\\"");
    }
 
T

troll

Gast
Das | nennt sich üblicherweise "Pipe". Ist aber in dem Fall kein Operator, sondern gehört einfach zum String.

Lies dich am besten mal in Regexp ein.

Edit: Der reguläre Ausdruck bedeutet wohl in dem Fall, dass er sowohl bei einem Doppelpunkt als auch bei einem Bindestrich splittet.

CMD.EXE lässt grüßen ...

"|" ist zwar unter CMD.EXE und einigen unix shells der PIPE-operator (wobei unter unix eher 1> und 2> genutzt werden) ... aber in sachen programmiersprache ist dies eideutig als bit-wise OR zu verstehen ...

und in punkto RegEx heißt es einfach "\\:" OR "\\-" ...


@Mujahiddin
ein einfeach ":|-" würde NICHT gehen da ":" und "-" RegEx-Metazeichen sind und daher escaped werden müssen ...
 
H

hüteüberhüte

Gast
... oder man nutzt die schon fertige Methode Pattern.quote ;)

Das Problem ist bei der Methode, dass einfach \\Q voran- und \\E nachgestellt wird. Eine andere (quote)-Methode habe ich noch nicht gefunden. Die gibts wohl auch nicht

Wie troll schon schrieb, | hat je nach Kontext eine andere Bedeutung. Innerhalb von regulären Ausdrücken ist es einfach das ODER

Innerhalb von booleschen Ausdrücken, arithmetischen Ausdrücken und einigen Shells hat es eine andere Bedeutung

PS: getRegex sieht unübersichtlich aus (vielleicht könnte man auch substring vermeiden), aber sie escaped wirklich jedes Metazeichen, auch solche, die nur innerhalb von [], () oder <> Metazeichen sind
 

Mujahiddin

Top Contributor
Ist dieser "troll" immer der gleiche? Der lässt so viel Unsinn von sich, das ist fast nicht mehr normal.
Ich habe in meinem letzten Post erklärt, warum man ":" und "-" nicht escapen muss. Sag mal, hast du keinen Compiler zur Hand und kannst es nicht ausprobieren?
Code:
:|-
eingeben, ausprobieren, und danach gar nicht erst sich blamieren. Danke im Voraus für das nächste Mal, wenn du diese Anweisung befolgst. Wirst du aber sowieso nicht.

Die quote-Methode tut genau das, was von ihr verlangt wird. Und da wird nicht nur \\Q vorne und \\E hinten drangehängt, da wird auch nach eventuellen \\E's gesucht und ebenfalls gequotet - als Pattern wird der resultierende String und alle Regexs darin nicht mehr so sinnvoll sein, sondern eben nur als exaktes Zitat.

| hat im Booleschen genau die gleiche Bedeutung wie ||, da | in diesem Bereich ein bitweise Operator ist und booleans [logischerweise] genau aus einem Bit bestehen.


Da jedoch OP in seinem Anfangspost nach diesem "|" gefragt hat und kurz darauf ein Beispiel von Regex vorgewiesen hat, hätte für jeden klar sein sollen, dass er nach dem "|" in Regex fragt.
 
H

hüteüberhüte

Gast
Die quote-Methode tut genau das, was von ihr verlangt wird. Und da wird nicht nur \\Q vorne und \\E hinten drangehängt, da wird auch nach eventuellen \\E's gesucht und ebenfalls gequotet

Gut, \\Es werden ebenfalls gequotet. Ändert aber nix daran, dass man so einen String weiter für nix gebrauchen kann und die Methode damit in meinen Augen (imho) unbrauchbar ist.

Daher war es nicht falsch, eine nützlichere Methode zu schreiben.

Eine Anmerkung, in welchen Kontext man sich bewegen, war außerdem angebracht.

Insofern kann man troll keinen Vorwurf machen. :toll:
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkelod Binäre Darstellung Bitwise-Operator Java Basics - Anfänger-Themen 10
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
C ?: Operator Java Basics - Anfänger-Themen 14
L Java operator % Java Basics - Anfänger-Themen 3
KogoroMori21 Erklärung zum Ternären Operator Java Basics - Anfänger-Themen 4
B Modulo-Operator anhand eines Beispieles erklären Java Basics - Anfänger-Themen 7
C Ternärer Operator mit Strings Java Basics - Anfänger-Themen 3
L Modulus Operator Java Basics - Anfänger-Themen 3
A Zuweisungen und -- operator; Java Basics - Anfänger-Themen 2
H << Operator Java Basics - Anfänger-Themen 7
F RegEx "+" nur als Zeichen, nicht als Operator oder Sonstiges Java Basics - Anfänger-Themen 2
H Operatoren Der bedingte Operator ? : ; Java Basics - Anfänger-Themen 2
J new-Operator Java Basics - Anfänger-Themen 6
H this operator - was ist das? Java Basics - Anfänger-Themen 2
R Operatoren Bad operand types for binary operator Java Basics - Anfänger-Themen 4
O Bedingter Operator eine Frage! Java Basics - Anfänger-Themen 10
O Erste Schritte x*y*z mit Shift Operator moeglich? Java Basics - Anfänger-Themen 15
L Operatoren error: bad operand types for binary operator && Java Basics - Anfänger-Themen 8
E Methoden in new-Operator Methode in geschweifter Klammer Java Basics - Anfänger-Themen 3
I bad operand types for binary operator > Java Basics - Anfänger-Themen 5
D Conditional Operator ?: Java Basics - Anfänger-Themen 3
L Operatoren Übungsklausuraufgabe, unbekannter Operator Java Basics - Anfänger-Themen 13
H Operatoren Fehler bad operand types for binary operator Java Basics - Anfänger-Themen 7
snipesss Operator "-" is undefined Java Basics - Anfänger-Themen 1
F Operatoren If mit variabelem Operator Java Basics - Anfänger-Themen 2
J instanceof Operator Java Basics - Anfänger-Themen 3
K Operatoren The Operator * is undefined for the argument type(s) double, String Java Basics - Anfänger-Themen 4
J Operator * benutzen Java Basics - Anfänger-Themen 3
DeVolt Operatoren Frage zum new-Operator Java Basics - Anfänger-Themen 4
N Methoden Modulo Operator Java Basics - Anfänger-Themen 1
S Operatoren ! Operator Java Basics - Anfänger-Themen 4
O Operator undefined Java Basics - Anfänger-Themen 2
N this-Operator Java Basics - Anfänger-Themen 2
ubaro1 Operatoren Der Tide Operator und positive Ganzzahlen in Binär Java Basics - Anfänger-Themen 1
S Hashcode - Operator ^ Java Basics - Anfänger-Themen 11
M Shift Operator Java Basics - Anfänger-Themen 3
V XOR-Operator? Java Basics - Anfänger-Themen 5
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
J bad operand types for binary operator Java Basics - Anfänger-Themen 3
T Pixelmanipulation Sobel-Operator Java Basics - Anfänger-Themen 2
K Frage zu Class Operator Java Basics - Anfänger-Themen 2
L The operator && is undefined for the argument type(s) String, boolean Java Basics - Anfänger-Themen 8
K .Class Operator unklar Java Basics - Anfänger-Themen 3
B Operator | Java Basics - Anfänger-Themen 11
R Compiler-Fehler Operator + nicht erlaubt? Java Basics - Anfänger-Themen 6
C Was tut der | Operator? Java Basics - Anfänger-Themen 8
K Polymorphie und instanceOf Operator Java Basics - Anfänger-Themen 6
S Objekt Erzeugung ohne new Operator Java Basics - Anfänger-Themen 6
C Logischer UND Operator funktioniert nicht richtig Java Basics - Anfänger-Themen 5
H Buch: Java lernen mit BlueJ Modulo-Operator Java Basics - Anfänger-Themen 16
K Conditional Operator Java Basics - Anfänger-Themen 16
A Was bedeutet der Operator *= ? Java Basics - Anfänger-Themen 2
A Operator in Java Java Basics - Anfänger-Themen 11
S Modulo Operator Java Basics - Anfänger-Themen 8
C Variablen Problem: variable operator might not have been initialized Java Basics - Anfänger-Themen 9
D : ? Operator -Verständnisproblem Java Basics - Anfänger-Themen 24
K OOP Wertebereich Ergebnis von % Operator Java Basics - Anfänger-Themen 8
L Frage zu Konstruktoren und dem this Operator Java Basics - Anfänger-Themen 16
R Ersatz für Modulo Operator Java Basics - Anfänger-Themen 8
W &-Operator in diesem Zusammenhang Java Basics - Anfänger-Themen 19
J Oder-Operator Tastenkürzel Java Basics - Anfänger-Themen 7
K Cast-Operator Java Basics - Anfänger-Themen 3
D Bit-Operator & Java Basics - Anfänger-Themen 5
Q mathematische Operationen als Methode und nicht Infix-Operator Java Basics - Anfänger-Themen 14
V Cast-Operator Java Basics - Anfänger-Themen 2
G super operator und incompatible types, simple fehler Java Basics - Anfänger-Themen 8
N Operator aus Array lesen Java Basics - Anfänger-Themen 2
G Für was braucht man den This-operator Java Basics - Anfänger-Themen 3
M Binärdarstellung in Java mit Shift-Operator + bitweises und Java Basics - Anfänger-Themen 2
W Seltsamer Operator int var = 1<< 23; Java Basics - Anfänger-Themen 4
P If Abfrage, Variablenvertauschung und UND Operator Java Basics - Anfänger-Themen 4
J Modulo-Operator rechnet falsch Java Basics - Anfänger-Themen 2
B + operator Java Basics - Anfänger-Themen 4
F Generische Methode - was bringt der Wildcard Operator? Java Basics - Anfänger-Themen 7
H Konditional Operator Java Basics - Anfänger-Themen 2
NightmareVirus new operator Java Basics - Anfänger-Themen 5
M %-Operator Java Basics - Anfänger-Themen 3
G string ohne '+' operator Java Basics - Anfänger-Themen 5
S Modulo-Operator Java Basics - Anfänger-Themen 5
S Operator ! auf char nicht anwendbar, was nun? Java Basics - Anfänger-Themen 7
T sobel-operator Java Basics - Anfänger-Themen 3
W %-Operator Java Basics - Anfänger-Themen 4
S Unterschied: ++a & a++ Operator? Java Basics - Anfänger-Themen 9
ven000m Operator += Java Basics - Anfänger-Themen 4
Student Probleme mit dem new-Operator Java Basics - Anfänger-Themen 14
G Operator-Überladung Java Basics - Anfänger-Themen 6
B Operator Java Basics - Anfänger-Themen 2
Z operator ++ Java Basics - Anfänger-Themen 3
N return-Operator Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben