2016-06-22 7 views
1

Ich arbeite an einer kommando-basierten Funktion für ein Projekt in Java und habe Probleme beim Einführen von Argumenten in diese Befehle.Java Vergleichen von zwei Zeichenfolgen mit Platzhalterwerten

Zum Beispiel werden alle Befehle wie diese diese gespeichert sind:

"Hey tell [USER] to [ACTION]" 

Nun, wenn der Benutzer den Befehl einreicht wird es wie folgt aussehen:

"Hey tell Player to come see me" 

Jetzt muss ich wissen, wie kann ich Vergleichen Sie den vom Benutzer eingegebenen Befehl mit dem gespeicherten Befehl, der Platzhalterwerte enthält. Ich muss in der Lage, die beiden Zeichenfolgen zu vergleichen und erkennen, dass sie den gleichen Befehl und dann aus dieser die Daten extrahieren [USER] und [ACTION] und bringt sie als Array

array[0] = "Player" 
array[1] = "come see me" 

wirklich jemand hoffen kann helfen mich aus, dank

+2

Können Sie erklären, was das Problem ist, ? Sie können ein Array aus einem Satz wie diesem erstellen, indem Sie string.split ("") verwenden und zwei Strings mit string1.equals (string2) vergleichen. – TomekK

+0

haben Sie versucht, concatination "Hey tell" + [USER] + "to" + "[AKTION]" –

+0

Nun, im Grunde habe ich eine Arraylist, die die Befehle mit den Platzhalter-Werten enthält. Wie zum Beispiel "Hey sag [USER] zu [AKTION]". Wenn der Benutzer nun einen Befehl wie "Hey sag John, komm zu mir" sendet, muss ich in der Lage sein, das mit dem gespeicherten Befehl in der Arraylist zu vergleichen, zu erkennen, dass es derselbe Befehl ist, und die Daten aus dem Befehl "John "und" Komm, sieh mich ". –

Antwort

0

Sie können wie unten Pattern Matching verwenden:

String command = "Hey tell [USER] to [ACTION]"; 
    String input = "Hey tell Player to come see me"; 
    String[] userInputArray = new String[2]; 

    String patternTemplate = command.replace("[USER]", "(.*)"); 
    patternTemplate = patternTemplate.replace("[ACTION]", "(.*)"); 

    Pattern pattern = Pattern.compile(patternTemplate); 
    Matcher matcher = pattern.matcher(input); 
     if (matcher.matches()) { 
      userInputArray[0] = matcher.group(1); 
      userInputArray[1] = matcher.group(2); 

     } 
0

Falls Sie eine gespeicherte String nicht brauchen, wie "Hey sagen [USER] bis [ACTION]" und Sie können verwenden Java (java.util.regex) Muster und Matcher.

Dies ist ein Beispiel:

Pattern p = Pattern.compile("Hey tell ([a-zA-z]+) to (.+)"); 
List<Pattern> listOfCommandPattern = new ArrayList<>(); 
listOfCommandPattern.add(p); 

Beispiel, analysieren Sie den Befehl:

String user; 
String command; 
Matcher m; 
// for every command 
for(Pattern p : listOfCommandPattern){ 
    m = p.matcher(inputCommand); 
    if (m.matches()) { 
     user = m.group(1); 
     command = m.group(2); 
     break; // found user and command 
    } 
} 
0

Hier ist eine etwas allgemeinere Version:

String pattern = "Hey tell [USER] to [ACTION]"; 
String line = "Hey tell Player to come see me"; 

/* a regular expression matching bracket expressions */ 
java.util.regex.Pattern bracket_regexp = Pattern.compile("\\[[^]]*\\]"); 

/* how many bracket expressions are in "pattern"? */ 
int count = bracket_regexp.split(" " + pattern + " ").length - 1; 

/* allocate a result array big enough */ 
String[] result = new String[count]; 

/* convert "pattern" into a regular expression */ 
String regex_pattern = bracket_regexp.matcher(pattern).replaceAll("(.*)"); 
java.util.regex.Pattern line_regex = Pattern.compile(regex_pattern); 

/* match "line" */ 
if (line_regex.matcher(line).matches()) { 
    /* extract the matched strings */ 
    for (int i=0; i<count; ++i) { 
     result[i] = line_matcher.group(i+1); 
     System.out.println(result[i]); 
    } 
} else { 
    System.out.println("Doesn't match."); 
}