2016-03-30 7 views
1

Heyo. Ich habe versucht, einen Code zu machen, der nach einem Namen in einer Zeichenfolge sucht und ihn einfach markiert.Wie platziere ich Marker in Java?

Zum Beispiel, wenn ein Name gegeben wurde "Jerry Smith" und eine Passage oder einen Satz gegeben wurde "Ich sah Jerry Smith einige Bäume riechen.".

Es würde zurückkehren „Ich sah [NAME] Jerry Smith [/ NAME] riechen einige Bäume

Ich dachte, es wäre möglich, dies nur mit der folgenden Funktionen ausführen:.

public void markNames(String name, String text) 
    { 
     String replacementStr = "[NAME]" + name + "[/NAME]"; 
     String replacedStr = text.replaceAll(name, replacementStr); 
     text = replacedStr; 
    } 

Aber das Ich bin mir sicher, dass ich einen komplexeren Regex brauche, aber ich bin mir ehrlich gesagt nicht sicher, was ich hineinlegen soll. Ich dachte, es wäre einfach genug, nur den Namen zu finden.

Danke für die Hilfe

+0

'textBlock.replaceAll': Wo ist' textBlock' aus? – Tacocat

+2

Verwendung ersetzen nicht ersetzenAlle –

+1

@Tacocat opps Entschuldigung. sollte Text sein. Ich habe es umgeschaltet und es funktioniert immer noch nicht. – Cinnamonsicks

Antwort

0

ändern diese beiden Linien:

String replacementStr = "[NAME]" + name + "[/NAME]"; 
String replacedStr = textBlock.replaceAll(name, replacementStr); 

Um dies:

String replacementStr = "[NAME]$1[/NAME]"; 
String replacedStr = textBlock.replaceAll("("+name+")", replacementStr); 

Warum diese

replaceAll() verwendet reguläre Ausdrücke arbeitet. Durch Hinzufügen der Klammern um name wird es zu einer Erfassungsgruppe. Ich beziehe mich auf diese Erfassungsgruppe als $1 im Austausch.

+0

Vielen Dank. Das hat wie ein Zauber funktioniert. – Cinnamonsicks

1

in der Methode [MarkNames], wo ist die Variable [TextBlock] aus? so, i geändert Sie Methode

public String markNames(String name, String text) { 
    String replacementStr = "[NAME]" + name + "[/NAME]"; 
    String replacedStr = text.replaceAll(name, replacementStr); 
    return replacedStr; 
} 

dann, i juint Test verwendet es

@Test 
public void test15(){ 
    System.out.println(markNames("Jerry Smith", "I saw Jerry Smith smell some trees.")); 
} 

Dieser Code gibt I saw [NAME]Jerry Smith[/NAME] smell some trees. Dies ist das Ergebnis, das Sie wollen? und ich denke, das Symbol verwenden sollte [% s] statt +

String replacementStr = String.format("[NAME]%s[/NAME]", name);