2016-04-19 16 views
0

Ich versuche festzustellen, ob eine Zeichenfolge ein bestimmtes Attribut enthält.Ermitteln, ob eine Teilzeichenfolge eine Zufallszahl enthält

Ich habe eine lange Zeichenfolge und möchte feststellen, ob das Attribut v_lstg_ # in dieser Zeichenfolge enthalten ist, aber das Problem, das ich habe, ist, dass das letzte Zeichen in v_lstg_ # eine beliebige Ganzzahl von 0 ist. 9, (daher das '#'), also meine Frage ist, was Regex (oder eine andere Methode) kann ich verwenden, um festzustellen, ob dieses Attribut in der Zeichenfolge enthalten ist?

So etwas Ähnliches wie:

String randomString; 
randomString.contains("v_lstg_" + "some integer valued, ranged from 0 - 9, regex here") 
+0

Ohne das Format 'randomString' sehen wir nicht wissen können. Das heißt, können wir diesen String als eine Reihe von Feldern betrachten? Wie werden die Felder dargestellt? Was ist das Format des Wertes nach diesem Feld (d. H. Alle numerischen, alphanumerischen, Leerzeichen, Nullen, ist es eine feste Breite ...?) Sobald Sie diese Informationen haben, können Sie auch eine Vorstellung von möglichen Lösungen bekommen. Vielleicht ist eine Regex nicht der richtige Weg, dies zu tun? – jdv

+0

Obligatorisch: http://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/ – jdv

+0

@jdv Nun, das Format der Zeichenfolge ist wirklich irrelevant. Angenommen, ich habe zwei Wörter in einem Satz und möchte überprüfen, dass "v_lstg_ #" in diesem Satz enthalten ist. Das einzige Problem ist, dass '#' eine zufällige Ganzzahl ist. – Robben

Antwort

0

Sie wollen nicht verwenden. Es ist ein regulärer Ausdruck, am Herzen liegt, so verwendet matches():

boolean matches = randomString.matches(".*v_lstg_\\d.*"); 

ETA: Antrag den v_lstg_ Teil vom Rest zu trennen gemacht wurde:

String prefix = "v_lstg_"; 
boolean found = randomString.matches(".*"+prefix+"\\d.*"); 
+0

Hmm gibt es eine Möglichkeit, das Wort "v_lstg_" von der von Ihnen bereitgestellten Regex zu trennen, so etwas wie v_lstg_ + regex? Um zu verdeutlichen, ist die willkürliche ganze Zahl von 0 bis 9. – Robben

+0

'\\ d' stimmt mit jeder einzelnen Ziffer überein, einschließlich 0.Und natürlich könntest du den "v_lstg_" -Teil herausziehen ... siehe Bearbeiten. Ich würde außerdem bemerken, dass dies mehrstellige Zahlen entsprechen würde. Das schien nicht Teil der ursprünglichen Anfrage zu sein, aber wenn das ein Problem ist, müsste die Regex entsprechend modifiziert werden. – dcsohl

0

hier ist ein weiteres Beispiel ... Verwenden der Regex Pattern- und Matcher-Klassen. Wenn Sie nur die Nummer möchten, können Sie die Regex-Gruppierung untersuchen, um das herauszufinden. Regexe können verrückt werden, also sei vorsichtig.

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Debug { 

    public static void main(String[] args) { 
    String s = "v_lstg_124536someotherstuff"; 
    String regex = "(v_lstg_\\d+)"; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(s); 
    System.out.println(m.find()); 
    System.out.println(s.subSequence(m.start(), m.end())); 

    } 
} 

hier ein Beispiel mit teh Gruppierung

public static void main(String[] args) { 
    String s = "v_lstg_124536someotherstuff"; 
    String regex = "(v_lstg_)(\\d+)"; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(s); 
    System.out.println(m.find()); 
    System.out.println(s.subSequence(m.start(), m.end())); 
    System.out.println(m.group(1)); 
    System.out.println(m.group(2)); 
    } 

die

druckt
true 
v_lstg_124536 
v_lstg_ 
124536 
Verwandte Themen