Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Das ganze könnte ich dann in eine neue Klasse ablegen mit: String sFieldName = s1
String sOperator = s2
String sResult = s3
String sNextOperator = s4
sNextOperator -> kann dann natürlich leer sein...
Gibt es hier eine Logik und hat jemand eine Idee, wie man das gescheit trennen kann? Die Operator können sich natürlich unterscheiden (-, +, /, *, .....)
Um an die verschiedenen Teilstrings zu kommen kannst du ganz einfach den String am Leerzeichen splitten - Gesetz dem Fall, dass 'Name' keine Leerzeichen enthält
Um an die verschiedenen Teilstrings zu kommen kannst du ganz einfach den String am Leerzeichen splitten - Gesetz dem Fall, dass 'Name' keine Leerzeichen enthält
(\\[%\\w+\\.\\w+%\\]) 1. Gruppe für den Feldnamen ([=|-|\\+|\\*]) 2. Gruppe für den Operator (lässt sich natürlich nach belieben erweitern ('[^']*') 3. Gruppe für das Ergebnis (OR)? 4. Gruppe für den optionalen nächsten Operator
PS: Ist nicht perfekt und soll nur als Anreiz dienen
Trotzdem mal ein Ansatz, wie so etwas aussehen könnte:
Java:
package org.java_forum.mihe7;
public class Token {
public static enum Type { FIELD, LITERAL, OP };
public final Type type;
public final String content;
Token(Type type, String content) {
this.type = type;
this.content = content;
}
@Override
public String toString() {
return "Token[" + type + ", " + content + "]";
}
}
Java:
package org.java_forum.mihe7;
import java.io.Reader;
import java.io.IOException;
import java.util.Iterator;
import java.util.NoSuchElementException;
import static org.java_forum.mihe7.Token.Type.*;
public class Tokenizer implements Iterator<Token> {
private final Reader reader;
private Token current;
public Tokenizer(Reader reader) {
this.reader = reader;
}
public boolean hasNext() {
try {
readToken();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
return current != null;
}
public Token next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
Token result = current;
current = null;
return result;
}
private void readToken() throws IOException {
if (current != null) {
return;
}
int ch;
int state = 0;
StringBuilder content = new StringBuilder();
while (current == null && (ch = reader.read()) != -1) {
char c = (char) ch;
switch (state) {
case 0:
if (!Character.isWhitespace(c)) {
if (c == '[') {
state = 1;
} else if (c == '\'') {
state = 2;
} else {
state = 3;
content.append(c);
}
}
break;
case 1:
if (c == ']') {
current = new Token(FIELD, content.toString());
} else {
content.append(c);
}
break;
case 2:
if (c == '\'') {
current = new Token(LITERAL, content.toString());
} else {
content.append(c);
}
break;
case 3:
if (Character.isWhitespace(c)) {
current = new Token(OP, content.toString());
} else {
content.append(c);
}
break;
default:
throw new IllegalStateException();
}
}
}
}
Zum Testen:
Java:
package org.java_forum.mihe7;
import java.io.StringReader;
public class TokenizerTest {
public static void main(String[] args) {
StringReader reader = new StringReader("[%Kunde.Vorname%] = 'Anton' OR [%Kunde.Vorname%] = 'Mike'");
Tokenizer t = new Tokenizer(reader);
while (t.hasNext()) {
System.out.println(t.next());
}
}
}
Lol. Nein, ich bin arbeitsuchend und beschäftige mich nebenbei ein bisschen mit der Programmierung. Die Geschichte geht so: Ich will ein Spiel in der Art von "Nexus - The Jupiter Incident" entwickeln. Dafür lege ich gerade die (grafischen) Grundlagen mit einem Lehrbuch und der uralten Genesis-3D-Engine. Die dort abgedruckten Codes liegen dem Buch auf CD bei, aber die sind total schlecht formatiert. Da ich die Codes evtl. in einem eigenen Programmier-Lehrgang verwenden will - es handelt sich um C++-Codes - will ich diese mit einem Java-Tool ordentlich (und mit meiner Note) formatieren. Dies will mir aber mangels Parser nicht so recht gelingen. Ich probiere es derzeit immer noch mit einer selbstprogrammierten Zeichenverarbeitung, d.h. ohne Parser, weil ich den Aufwand der Einarbeitung - nur für dieses kleine Tool - etwas scheue.