Ποιο μοτίβο regex πρέπει να περάσω στη μέθοδο java.lang.String.split()
για να χωρίσω ένα String σε ένα Array υποσυνόλων χρησιμοποιώντας όλους τους χαρακτήρες λευκού χώρου (' ', '\t', '\n', κ.λπ.) ως οριοθέτες;
Κάτι σαν
myString.split("\\s+");
Αυτό ομαδοποιεί όλα τα λευκά κενά ως διαχωριστικό.
Έτσι, αν έχω τη συμβολοσειρά:
"Hello[space][tab]World"
Αυτό θα πρέπει να δώσει τις συμβολοσειρές "Hello"
και "World"
και να παραλείψει το κενό διάστημα μεταξύ του [space]
και του [tab]
.
Όπως επισήμανε ο VonC, η backslash θα πρέπει να διαφυγεί, επειδή η Java θα προσπαθούσε πρώτα να διαφυγήσει τη συμβολοσειρά σε έναν ειδικό χαρακτήρα, και θα έστελνε αυτό προς ανάλυση. Αυτό που θέλετε, είναι το κυριολεκτικό "\s"
, που σημαίνει ότι πρέπει να περάσετε το "\\s"
. Μπορεί να μπερδευτεί λίγο.
Το \\\s
ισοδυναμεί με [ \\\t\\n\x0B\f\\r]
Στις περισσότερες διαλέκτους regex υπάρχει ένα σύνολο βολικών περιλήψεων χαρακτήρων που μπορείτε να χρησιμοποιήσετε για τέτοιου είδους πράγματα - αυτές είναι καλές για να τις θυμάστε:
\w
- Ταιριάζει με οποιονδήποτε χαρακτήρα λέξης.
\W
- Ταιριάζει με οποιονδήποτε μη λεκτικό χαρακτήρα.
\s
- Ταιριάζει με οποιονδήποτε χαρακτήρα λευκού διαστήματος.
\S
- Ταιριάζει με οτιδήποτε άλλο εκτός από χαρακτήρες λευκού διαστήματος.
\d
- Ταιριάζει με οποιοδήποτε ψηφίο.
\D
- Ταιριάζει με οτιδήποτε εκτός από ψηφία.
Μια αναζήτηση για "Regex Cheatsheets" θα σας ανταμείψει με ένα σωρό χρήσιμες περιλήψεις.