Il suffit d' utiliser la méthode appropriée: String#split()
.
String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556
Notez que cela prend une expression régulière , pensez donc à échapper les caractères spéciaux si nécessaire.
il y a 12 caractères avec des significations spéciales: la barre oblique inverse \
, le ^
signe d' insertion , le signe dollar $
, la période ou le point .
, la barre verticale ou le symbole de la pipe |
, le point d'interrogation ?
, l'astérisque ou l'étoile *
, le signe plus +
, la parenthèse ouvrante (
, la parenthèse fermante )
, et le crochet ouvrant [
, l'accolade ouvrante {
, Ces caractères spéciaux sont souvent appelés "métacaractères".
Donc, si vous voulez diviser par exemple période / point .
qui signifie " n'importe quel caractère " dans l'expression régulière, utilisez soit une barre oblique inversée\
pour échapper au caractère spécial individuel comme tel split("\\.")
, soit utilisez la classe de caractères[]
pour représenter des caractères littéraux comme tels split("[.]")
, ou utilisez Pattern#quote()
pour échapper à la chaîne entière comme ça split(Pattern.quote("."))
.
String[] parts = string.split(Pattern.quote(".")); // Split on period.
Pour tester au préalable si la chaîne contient certains caractères, utilisez simplement String#contains()
.
if (string.contains("-")) {
// Split it.
} else {
throw new IllegalArgumentException("String " + string + " does not contain -");
}
Notez que cela ne prend pas d'expression régulière. Pour cela, utilisez String#matches()
plutôt.
Si vous souhaitez conserver le caractère scindé dans les parties résultantes, utilisez la recherche positive . Dans le cas où vous souhaitez que le caractère divisé se retrouve dans la partie gauche, utilisez le lookbehind positif en préfixant le ?<=
groupe sur le motif.
String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556
Dans le cas où vous souhaitez que le caractère divisé se retrouve dans le côté droit, utilisez l'anticipation positive en préfixant le ?=
groupe sur le motif.
String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556
Si vous souhaitez limiter le nombre de pièces résultantes, vous pouvez fournir le nombre souhaité comme 2ème argument de la split()
méthode.
String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42
reugalr expression
il renvoie un tableau d'éléments avec une chaîne entière.Une alternative au traitement direct de la chaîne serait d'utiliser une expression régulière avec des groupes de capture. Cela a l'avantage de permettre d'impliquer des contraintes plus sophistiquées sur l'entrée. Par exemple, ce qui suit divise la chaîne en deux parties et garantit que les deux ne sont constitués que de chiffres:
Comme le modèle est fixe dans cette instance, il peut être compilé à l'avance et stocké en tant que membre statique (initialisé au moment du chargement de la classe dans l'exemple). L'expression régulière est:
Les parenthèses indiquent les groupes de capture; la chaîne qui correspond à cette partie de l'expression rationnelle est accessible par la méthode Match.group (), comme indiqué. Le \ d correspond à un seul chiffre décimal, et le + signifie "correspondre à une ou plusieurs des expressions précédentes). Le - n'a pas de signification particulière, donc correspond simplement à ce caractère dans l'entrée. Notez que vous devez double-échapper les barres obliques inverses lors de l'écriture en tant que chaîne Java. Quelques autres exemples:
la source
m.group(1)
, la deuxième partiem.group(2)
, carm.group(0)
retourne en fait le modèle de correspondance complet. Je pense que je me souviens égalementgroup(0)
d'être le premier match au lieu du motif complet, peut-être que cela a changé dans une récente mise à jour de la version java.Cela divisera votre chaîne en 2 parties. Le premier élément du tableau sera la partie contenant les éléments avant le
-
, et le 2e élément du tableau contiendra la partie de votre chaîne après le-
.Si la longueur du tableau n'est pas 2, la chaîne n'a pas été dans le format:
string-string
.Découvrez la
split()
méthode dans laString
classe.la source
devrait faire ce que vous voulez. La classe String possède de nombreuses méthodes pour fonctionner avec la chaîne.
la source
la source
StringTokenizer
est une classe héritée qui est conservée pour des raisons de compatibilité, bien que son utilisation soit déconseillée dans le nouveau code . Il est recommandé que toute personne recherchant cette fonctionnalité utilise lasplit
méthodeString
ou lejava.util.regex
package à la place."Avec Java 8:
la source
.map(String::trim)
après lesplit
Les exigences laissaient place à l'interprétation. Je recommande d'écrire une méthode,
qui encapsulent cette fonction. Bien sûr, vous pouvez utiliser String.split (..) comme mentionné dans les autres réponses pour l'implémentation.
Vous devez écrire des tests unitaires pour les chaînes d'entrée et les résultats et comportements souhaités.
Les bons candidats aux tests doivent comprendre:
En définissant les résultats de test correspondants, vous pouvez spécifier le comportement.
Par exemple, si
"-333"
doit revenir[,333]
ou s'il s'agit d'une erreur. Peut"333-333-33"
être séparé[333,333-33] or [333-333,33]
ou est-ce une erreur? Etc.la source
Vous pouvez essayer comme ça aussi
la source
En admettant que
Le moyen le plus simple consiste à utiliser StringUtils # split (java.lang.String, char) . C'est plus pratique que celui fourni par Java hors de la boîte si vous n'avez pas besoin d'expressions régulières. Comme son manuel l'indique, il fonctionne comme ceci:
Je recommanderais d'utiliser commong-lang, car il contient généralement beaucoup de choses utilisables. Cependant, si vous n'en avez pas besoin pour autre chose que de faire un fractionnement, alors vous implémenter ou échapper à l'expression régulière est une meilleure option.
la source
Utilisez la méthode de fractionnement org.apache.commons.lang.StringUtils qui peut fractionner des chaînes en fonction du caractère ou de la chaîne que vous souhaitez fractionner.
Signature de la méthode:
Dans votre cas, vous souhaitez diviser une chaîne lorsqu'il y a un "-".
Vous pouvez simplement faire comme suit:
Production:
Supposons que si
-
n'existe pas dans votre chaîne, il renvoie la chaîne donnée et vous n'obtiendrez aucune exception.la source
Pour résumer: il existe au moins cinq façons de diviser une chaîne en Java:
String.split ():
Pattern.compile (regexp) .splitAsStream (entrée):
StringTokenizer (classe héritée):
Google Guava Splitter:
Apache Commons StringUtils:
Vous pouvez donc choisir la meilleure option pour vous en fonction de ce dont vous avez besoin, par exemple le type de retour (tableau, liste ou itérable).
Voici un grand aperçu de ces méthodes et des exemples les plus courants (comment diviser par point, barre oblique, point d'interrogation, etc.)
la source
Le moyen le plus rapide, qui consomme également le moins de ressources, pourrait être:
la source
string1 = s.substring(0, s.indexOf("-"));
string2 = s.substring(s.indexOf("-") + 1);
en. Vous obtiendrezStringIndexOutOfBoundsException
automatiquement s'il n'y avait pas de "-".Split de chaîne avec plusieurs caractères à l'aide de Regex
Production:
Mais ne vous attendez pas à la même sortie sur toutes les versions JDK. J'ai vu un bogue qui existe dans certaines versions de JDK où la première chaîne nulle a été ignorée. Ce bogue n'est pas présent dans la dernière version de JDK, mais il existe dans certaines versions entre les dernières versions de JDK 1.7 et les premières versions 1.8.
la source
Pour des cas d'utilisation simples
String.split()
devraient faire le travail. Si vous utilisez la goyave, il existe également une classe Splitter qui permet de chaîner différentes opérations de chaîne et prend en charge CharMatcher :la source
la source
Vous pouvez fractionner une chaîne par un saut de ligne à l'aide de l'instruction suivante:
Vous pouvez fractionner une chaîne par un trait d'union / caractère à l'aide de l'instruction suivante:
la source
la source
Vous pouvez utiliser Split ():
Sinon, vous pouvez utiliser StringTokenizer:
la source
Il n'y a que deux méthodes à considérer.
Utilisez String.split pour un délimiteur à un caractère ou vous ne vous souciez pas des performances
Si les performances ne sont pas un problème, ou si le délimiteur est un caractère unique qui n'est pas un caractère spécial d'expression régulière (c'est-à-dire pas l'un des
.$|()[{^?*+\
), vous pouvez utiliserString.split
.La méthode de fractionnement a une optimisation pour éviter d'utiliser une expression régulière si le délimiteur est un seul caractère et ne figure pas dans la liste ci-dessus. Sinon, il doit compiler une expression régulière, ce qui n'est pas idéal.
Utilisez Pattern.split et précompilez le modèle si vous utilisez un délimiteur complexe et que vous vous souciez des performances.
Si les performances sont un problème et que votre délimiteur n'est pas l'un des précédents, vous devez précompiler un modèle d'expression régulière que vous pouvez ensuite réutiliser.
Cette dernière option crée toujours un nouvel
Matcher
objet. Vous pouvez également mettre en cache cet objet et le réinitialiser pour chaque entrée pour des performances maximales, mais cela est un peu plus compliqué et non thread-safe.la source
Une façon de procéder consiste à parcourir la chaîne dans une boucle pour chaque et à utiliser le caractère de fractionnement requis.
Production:
la source
Veuillez ne pas utiliser la classe StringTokenizer car c'est une classe héritée qui est conservée pour des raisons de compatibilité, et son utilisation est déconseillée dans le nouveau code. Et nous pouvons également utiliser la méthode de fractionnement comme suggéré par d'autres.
Et comme prévu, il imprimera:
Dans cette réponse, je tiens également à souligner un changement qui a eu lieu pour la
split
méthode dans Java 8 . La méthode String # split () utilisePattern.split
, et maintenant elle supprimera les chaînes vides au début du tableau de résultats. Notez ce changement dans la documentation de Java 8:Cela signifie pour l'exemple suivant:
nous obtiendrons trois chaînes:
[0, 0, 4]
et non quatre comme c'était le cas en Java 7 et avant. Vérifiez également cette question similaire .la source
Voici deux façons dont deux y parviennent.
VOIE 1: Comme vous devez diviser deux nombres par un caractère spécial, vous pouvez utiliser l'expression régulière
WAY 2: Utilisation de la méthode de partage des chaînes
la source
Vous pouvez simplement utiliser StringTokenizer pour diviser une chaîne en deux ou plusieurs parties, qu'il existe des délimiteurs:
la source
Découvrez la
split()
méthode dans laString
classe sur javadoc.Voici de nombreux exemples de split string mais j'ai peu de code optimisé.
la source
-
par|
et voyez ce qui se passe :)la source
Je voulais juste écrire un algorithme au lieu d'utiliser des fonctions intégrées Java:
la source
Vous pouvez utiliser la méthode
split
:la source
Pour diviser une chaîne, utilise String.split (regex). Consultez les exemples suivants:
Production
Remarque:
Cette scission (regex) prend un regex comme argument. N'oubliez pas d'échapper aux caractères spéciaux regex, comme point / point.
la source
la source
Pour diviser une chaîne, utilisez
String.split(regex)
:Production:
la source