2010-03-04 22 views
6

Hey Leute, ich versuche Javas useDelimiter Methode zu verwenden, um Scanner Klasse zu tun, um ein einfaches Parsing zu machen. Im Grunde genommen jede Zeile ist ein Datensatz von abgegrenzten „|“, so zum Beispiel:Regulärer Ausdruck zum Anpassen "|"

2 | John Doe 
3 | Jane Doe 
4 | Jackie Chan 

das Verfahren als Parameter, für das einen regulären Ausdruck dauert anzupassen. Kann mir jemand bitte den regulären Ausdruck liefern, der mit | übereinstimmt (Ein vertikaler Balken, der auf beiden Seiten durch ein Leerzeichen getrennt ist).

Danke, ich würde es wirklich schätzen!

+1

java eine Art von String-Split-Funktion haben muss. Du kannst das benutzen. –

+0

Ja, das ist tatsächlich, was ich getan habe, aber ich benutze immer noch die Regex, um die Zeile string :) –

Antwort

11

Ich kam mit \s\|\s, die in Java würde als "\\s\\|\\s" ausgedrückt werden. Ich weiß nicht, ob das das Beste ist. Ich brauche nichts hardcore, nur etwas, das funktioniert, und das scheint zu :)

Entschuldigung für die Beantwortung meiner eigenen Frage, ich denke, nach dem Tippen es mir half mir zu denken.

+2

Seien Sie vorsichtig, '\ s' wäre jedes Leerzeichen, einschließlich' \ t'! Daher möchten Sie vielleicht genauer sein, abhängig von Ihrem Eingabe-Set. –

+4

Ich stimme zu - Ich würde mit '" \\ | "' gehen als mein Argument zu verwendenDelimiter –

+0

Ohhh okay, danke! Ich wusste nicht, dass es so einfach sein könnte :) –

0
" \| " 

würde funktionieren, müssen Sie Zitate und die | entkommen

0

Vergessen Sie nicht, die * enthalten übereinstimmen Charakter

\S*\s*\|\s*[\S\t ]* 

Edited Wiederholung - Sie können einfach benutzen diese .*\|.*

+1

Ihre zweite Regex, '. * \ |. *', Würde Leerzeichen auf den zurückgegebenen Zeichenfolgen lassen ... –

3

Hier ist ein Code-Snippet, das eine Zeichenfolge analysiert (oder eine ganze Datei, Scanner akzeptiert beides) und extrahiert die Nummer und den Namen aus jeder Zeile:

String s = 
    "1 | Mr John Doe\n" + 
    "2 | Ms Jane Doe\n" + 
    "3 | Jackie Chan\n"; 

Pattern pattern = Pattern.compile("(\\d+) \\| ((\\w|\\s)+)"); 
Scanner scan = new Scanner(s); 
while (scan.findInLine(pattern) != null) { 
    MatchResult match = scan.match(); 

    // Do whatever appropriate with the results 
    System.out.printf("N° %d is %s %n", Integer.valueOf(match.group(1)), match.group(2)); 

    if (scan.hasNextLine()) { 
     scan.nextLine(); 
    } 
} 

Dieser Code-Schnipsel erzeugt das folgende Ergebnis:

N° 1 is Mr John Doe 
N° 2 is Ms Jane Doe 
N° 3 is Jackie Chan 
+0

cool! split() hat ein Argument mit regulärem Ausdruck, daher müssen Sie \ | verwenden um einen Balken darzustellen, in einem String ist es "\\". – jgmao

Verwandte Themen