2009-11-09 5 views
15

Auf einigen HTML von einer Webseite zu extrahieren, ich habe einige Elemente Text enthält, die in einer unbekannten oder nicht-passenden Leerzeichen enden (dh stimmt nicht überein „\\ s“):Unidentified Leerzeichen in Java

<span>Monday </span> 

in Java, zu überprüfen, was dieses Zeichen ist, ich tue:

String s = getTheSpanContent(); 
char c = s.charAt(s.length() -1); 
int i = (int) c; 

und der Wert von i: 160

Wer weiß, was das ist? Und wie kann ich dazu passen?

Dank

+0

Spiel für wie? Brauchen Sie die Regex oder würden Sie eine andere Methode verwenden? Was versuchst du auch damit zu erreichen? Wir können bessere Antworten mit mehr Informationen geben. –

Antwort

20

Es ist ein non-breaking space. Nach der Pattern Javadocs, \\s entspricht [ \t\n\x0B\f\r], so müssen Sie explizit \xA0 zu Ihrem Regex hinzufügen, wenn Sie es übereinstimmen möchten.

+0

ok, danke - das hängt mit der html-Quelle zusammen. Joels Lösung unten funktioniert auch. –

+3

so meine Regex für die Übereinstimmung aller Leerzeichen inc. Nicht brechen ist: "[\\ s \\ xA0] +" - scheint zu funktionieren. Jubel um Hilfe. –

4

Die \u00A0 ist, auch als non-breaking Raum bekannt. Wenn Sie HTML kennen, werden Sie verstehen, dass es sich um denselben Raum handelt, der von &nbsp; repräsentiert wird. Anscheinend benutzte man es anstelle eines normalen Raums.

+0

ok das macht Sinn. Ich kann in der Quelle   sehen - aber mein Parser konvertierte es in dieses Zeichen, das \\ s nicht übereinstimmt. Prost –

+0

Es war nicht klar aus Ihrer Frage, dass Sie nach einem Regex-Muster gesucht haben, das zu dem bestimmten Charakter passt. Wie auch immer, es ist gut zu wissen, dass dezimal 160 gleich hex A0 ist, damit Sie schließlich wissen, welcher Hexcode in Regex- und Unicode-Diagrammen verwendet werden soll. – BalusC

4

Versuchen Sie, diese mit Leerzeichen übereinstimmen

Character.isSpaceChar(c) || c <= ' '; 
Verwandte Themen