web-dev-qa-db-fra.com

Comment analyser cette chaîne en Java?

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

17
omg

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.

51
coobird

Dans ce cas, pourquoi ne pas utiliser new File("prefix/dir1/dir2/dir3/dir4") et partir de là?

2
n3rd
...
String str = "bla!/bla/bla/"

String parts[] = str.split("/");

//To get fist "bla!"
String dir1 = parts[0];
2
user101375
 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

1
Raghunandan
 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 
} 
1
Edward Dale

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 .

0
Amit Upadhyay

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.

0
thecarlhall
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]);
    }
    }

}
0
Ken

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 ...)

0