préfixe/dir1/dir2/dir3/dir4/..
Comment analyser les valeurs dir1, dir2
de la chaîne ci-dessus en Java?
Le préfixe ici peut être:
/ usr/local/Apache2/reprend
Si vous voulez diviser la String
au caractère /
, la méthode String.split
fonctionnera:
Par exemple:
String s = "prefix/dir1/dir2/dir3/dir4";
String[] tokens = s.split("/");
for (String t : tokens)
System.out.println(t);
Sortie
prefix
dir1
dir2
dir3
dir4
Modifier
Cas avec un /
dans le préfixe, et nous savons quel est le préfixe:
String s = "slash/prefix/dir1/dir2/dir3/dir4";
String prefix = "slash/prefix/";
String noPrefixStr = s.substring(s.indexOf(prefix) + prefix.length());
String[] tokens = noPrefixStr.split("/");
for (String t : tokens)
System.out.println(t);
La sous-chaîne sans le préfixe "slash/prefix/"
est créée par la méthode substring
. Cette String
est ensuite parcourue par split
.
Sortie:
dir1
dir2
dir3
dir4
Modifier à nouveau
Si cette String
traite effectivement des chemins de fichiers, il est probablement préférable d’utiliser la classe File
class que d’utiliser des manipulations de chaîne. Des classes telles que File
qui prennent déjà en compte toutes les subtilités de la gestion des chemins de fichiers vont être plus robustes.
Dans ce cas, pourquoi ne pas utiliser new File("prefix/dir1/dir2/dir3/dir4")
et partir de là?
...
String str = "bla!/bla/bla/"
String parts[] = str.split("/");
//To get fist "bla!"
String dir1 = parts[0];
String result;
String str = "/usr/local/Apache2/resumes/dir1/dir2/dir3/dir4";
String regex ="(dir)+[\\d]";
Matcher matcher = Pattern.compile( regex ).matcher( str);
while (matcher.find( ))
{
result = matcher.group();
System.out.println(result);
}
sortie-- dir1 dir2 dir3 dir4
String str = "/usr/local/Apache/resumes/dir1/dir2"; String prefix ="/usr/local/Apache/reprend /"; (préfixe) ) { str = str.substring (0, prefix.length); Parties de chaîne [] = str.split ("/"); // dir1 = parts [0]; // dir2 = parts [1]; } else { // Cela ne commence pas par votre préfixe }
Utiliser la méthode String.split
fonctionnera sûrement comme indiqué dans d'autres réponses ici.
De même, StringTokenizer
class peut être utilisé pour analyser la chaîne en utilisant /
comme délimiteur.
import Java.util.StringTokenizer;
public class Test
{
public static void main(String []args)
{
String s = "prefix/dir1/dir2/dir3/dir4/..";
StringTokenizer tokenizer = new StringTokenizer(s, "/");
String dir1 = tokenizer.nextToken();
String dir2 = tokenizer.nextToken();
System.out.println("Dir 1 : "+dir1);
System.out.println("Dir 2 : " + dir2);
}
}
Donne la sortie comme:
Dir 1 : prefix
Dir 2 : dir1
Ici vous pouvez en savoir plus sur StringTokenizer .
String.split (String regex) est pratique, mais si vous n'avez pas besoin de la gestion des expressions régulières, utilisez l'exemple avec stringing (..), Java.util.StringTokenizer ou utilisez Apache commons lang 1 . La différence de performance lorsque vous n'utilisez pas d'expressions régulières peut être un gain de 1 à 2 ordres de grandeur en vitesse.
public class Test {
public static void main(String args[]) {
String s = "pre/fix/dir1/dir2/dir3/dir4/..";
String prefix = "pre/fix";
String[] tokens = s.substring(prefix.length()).split("/");
for (int i=0; i<tokens.length; i++) {
System.out.println(tokens[i]);
}
}
}
S'il s'agit d'un fichier, vous pouvez obtenir les pièces en créant une instance de fichier, puis demander ses segments.
C'est bien parce que cela fonctionnera quelle que soit la direction des barres obliques; c'est indépendant de la plate-forme (sauf les "lettres de lecteur" dans Windows ...)