2017-09-07 14 views
3

Zum Beispiel habe ich einen String, der enthält:Text suchen zwischen Sonderzeichen und ersetzen Zeichenfolge

String s = "test string *67* **Hi**";

Ich möchte diesen String erhalten:

*67* 

Mit den Sternen, so dass ich kann beginnen, diesen Teil der Zeichenfolge zu ersetzen. Mein Code im Moment wie folgt aussieht:

String s = "test string *67* **Hi**"; 

     s = s.substring(s.indexOf("*") + 1); 
     s = s.substring(0, s.indexOf("*")); 

Diese Ausgänge: 67 ohne die Sterne.

Ich würde gerne wissen, wie man eine Zeichenfolge zwischen einigen Sonderzeichen, aber nicht mit den Zeichen zusammen, wie ich will.

sollte die Ausgabe wie folgt sein:

//output: test string hello **hi** 
+0

Vorsichtig, indem Sie eine "Zeichenfolge" wie folgt ersetzen. Du könntest mehr ersetzen, als du gedacht hast in "testring * 67 * ** Hi **, ich bin ** 67 **" '. Aber da Sie die 'String' bereits mit' substring' finden können, nehmen Sie einfach den linken Teil, fügen Sie das Ersatzteil hinzu, fügen Sie den rechten Teil hinzu. – AxelH

+0

@ Roadman1991 Möchten Sie auch String '* Hi *' ersetzen? – MaxZoom

+0

wie ist das upvoted? ... – DPM

Antwort

2

Um nur die Zeichenfolge zwischen Sonderzeichen zu ersetzen:

String regex = "(\\s\\*)([^*]+)(\\*\\s)"; 
String s = "test string *67* **Hi**"; 
System.out.println(s.replaceAll(regex,"$1hello$3")); 

// output: test string *hello* **Hi** 

DEMO und Regex explanation

EDIT
auch die Sonderzeichen unter regex verwenden zu entfernen:

String regex = "(\\s)(\\*[^*]+\\*)(\\s)"; 

DEMO

+0

Ich denke, das ist großartig. Aber die Ausgabe sollte wie folgt aussehen: // Ausgabe: Test String Hallo ** Hallo ** – Roadman1991

+0

Die Regex aktualisiert, um auch die Sonderzeichen zu entfernen – MaxZoom

2

Sie müssen nur Grenzen erweitern:

s = s.substring(s.indexOf("*")); 
s = s.substring(0, s.indexOf("*", 1)+1); 
+1

Wie [Mário Fernandes] (https://Stackoverflow.com/a/46097627/4391450) bemerkt, da Sie das '*' in der ersten Teilzeichenfolge behalten, wird Ihre zweite 'indexOf' 0 zurückgeben;) – AxelH

+0

ging gerade zu Kommentar, dass :) –

+1

Guter Punkt, danke, behoben – Andremoniy

1
s = s.substring(s.indexOf("*")); 
s = s.substring(0, s.indexOf("*", 1) + 1); 

Ihre +1 ist an der falschen Stelle :) Dann finden Sie müssen nur die nächste von der zweiten Position ausgehend

0

Ich denke, Sie können sogar Ihre Ausgabe mit Li bekommen st auch

String s = "test string *67* **Hi**"; 

List<String> sList = Arrays.asList(s.split(" ")); 

System.out.println(sarray.get(sarray.indexOf("*67*"))); 

Hope this helfen.

Verwandte Themen