Hoe deze string in Java te ontleden?

prefix/dir1/dir2/dir3/dir4/..

Hoe de dir1, dir2waarden uit de bovenstaande string in Java te ontleden?

Het voorvoegsel hier kan zijn:

/usr/local/apache2/resumes


Antwoord 1, autoriteit 100%

Als u de Stringwilt splitsen bij het teken /, moet de String.splitmethode zal werken:

Bijvoorbeeld:

String s = "prefix/dir1/dir2/dir3/dir4";
String[] tokens = s.split("/");
for (String t : tokens)
  System.out.println(t);

Uitvoer

prefix
dir1
dir2
dir3
dir4

Bewerken

Geval met een /in het voorvoegsel, en we weten wat het voorvoegsel is:

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

De substring zonder het voorvoegsel "slash/prefix/"is gemaakt door de substringmethode. Die Stringwordt dan door splitgehaald.

Uitvoer:

dir1
dir2
dir3
dir4

Opnieuw bewerken

Als deze Stringdaadwerkelijk te maken heeft met bestandspaden, gebruik dan de Fileklasse heeft waarschijnlijk meer de voorkeur dan het gebruik van stringmanipulaties. Klassen zoals Filedie al rekening houden met alle fijne kneepjes van het omgaan met bestandspaden, zullen robuuster zijn.


Antwoord 2, autoriteit 3%

Waarom zou u in dit geval new File("prefix/dir1/dir2/dir3/dir4")niet gebruiken en vanaf daar verder gaan?


Antwoord 3, autoriteit 3%

String str = "/usr/local/apache/resumes/dir1/dir2";
String prefix = "/usr/local/apache/resumes/";
if(str.startsWith(prefix) ) {
 str = str.substring(0, prefix.lengte);
 Stringdelen[] = str.split("/");
 // dir1=onderdelen[0];
 // dir2=onderdelen [1];
} anders {
 // Het begint niet met jouw voorvoegsel
}

Antwoord 4, autoriteit 3%

...
String str = "bla!/bla/bla/"
String parts[] = str.split("/");
//To get fist "bla!"
String dir1 = parts[0];

Antwoord 5, autoriteit 2%

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);                 
}

uitvoer–
dir1
dir2
dir3
dir4


Antwoord 6, autoriteit 2%

Het gebruik van de String.splitmethode zal zeker werken zoals verteld in andere antwoorden hier.

Ook de klasse StringTokenizerkan worden gebruikt om de tekenreeks te ontleden met behulp van /als scheidingsteken.

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);
    }
}

Geeft de uitvoer als:

Dir 1  : prefix
Dir 2 : dir1

Hier kun je meer vinden over StringTokenizer.


Antwoord 7

Als het een bestand is, kunt u de onderdelen verkrijgen door een instantie van bestand te maken en vervolgens om de segmenten te vragen.

Dit is goed omdat het werkt ongeacht de richting van de schuine strepen; het is platformonafhankelijk (behalve de “stationsletters” in Windows…)


Antwoord 8

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

Antwoord 9

String.split(String regex) is handig, maar als je de afhandeling van reguliere expressies niet nodig hebt, gebruik dan het voorbeeld substring(..), java.util.StringTokenizer of gebruik Apache commons lang 1. Het prestatieverschil wanneer geen reguliere expressies worden gebruikt, kan een snelheidswinst van 1 tot 2 ordes van grootte zijn.


Antwoord 10

String s = "prefix/dir1/dir2/dir3/dir4"
String parts[] = s.split("/");
System.out.println(s[0]); // "prefix"
System.out.println(s[1]); // "dir1"
...

Other episodes