如何用Java解析这个字符串?

时间:2009-06-04 12:57:49

标签: java string

  

前缀/ DIR1 / DIR2 / DIR3 / dir4 /..

如何在Java中解析上述字符串中的dir1, dir2值?

这里的前缀可以是:

的/ usr /本地/ apache2的/恢复

10 个答案:

答案 0 :(得分:52)

如果您要将String分割为/字符,String.split方法将有效:

例如:

String s = "prefix/dir1/dir2/dir3/dir4";
String[] tokens = s.split("/");

for (String t : tokens)
  System.out.println(t);

输出

prefix
dir1
dir2
dir3
dir4

修改

前缀中带有/的情况,我们知道前缀是什么:

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

不带前缀"slash/prefix/"的子字符串由substring方法生成。然后String运行split

输出:

dir1
dir2
dir3
dir4

再次修改

如果这个String实际上是在处理文件路径,那么使用File类可能比使用字符串操作更可取。像File这样已经考虑到处理文件路径的所有复杂问题的类会更加健壮。

答案 1 :(得分:2)

在这种情况下,为什么不使用new File("prefix/dir1/dir2/dir3/dir4")并从那里开始?

答案 2 :(得分:2)

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

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

//To get fist "bla!"
String dir1 = parts[0];

答案 3 :(得分:1)

String str = "/usr/local/apache/resumes/dir1/dir2";
String prefix = "/usr/local/apache/resumes/";

if( str.startsWith(prefix) ) {
  str = str.substring(0, prefix.length);
  String parts[] = str.split("/");
  // dir1=parts[0];
  // dir2=parts[1];
} else {
  // It doesn't start with your prefix
}

答案 4 :(得分:1)

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

output-- DIR1 DIR2 DIR3 dir4

答案 5 :(得分:0)

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

}

答案 6 :(得分:0)

如果是文件,您可以通过创建文件的instanceof来获取部件,然后询问其细分。

这很好,因为无论斜线的方向如何,它都能工作;它是独立于平台的(除了Windows中的“驱动器号”...)

答案 7 :(得分:0)

String.split(String regex)很方便但如果你不需要正则表达式处理,那么请使用substring(..)示例,java.util.StringTokenizer或使用Apache commons lang 1。不使用正则表达式时的性能差异可以是速度增加1到2个数量级。

答案 8 :(得分:0)

使用String.split方法肯定会在其他答案中说明。

此外,StringTokenizer类可用于使用/作为分隔符来解析String。

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

输出为:

Dir 1  : prefix
Dir 2 : dir1

您可以在此处找到有关StringTokenizer的更多信息。

答案 9 :(得分:-1)

String s = "prefix/dir1/dir2/dir3/dir4"

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

System.out.println(s[0]); // "prefix"
System.out.println(s[1]); // "dir1"
...