簡體   English   中英

如何用Java解析這個字符串?

[英]How to parse this string in Java?

前綴/ DIR1 / DIR2 / DIR3 / dir4 / ..

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

這里的前綴可以是:

在/ usr /本地/的Apache2 /簡歷

如果要將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/"substringsubstring方法生成。 然后,該String將通過split運行。

輸出:

dir1
dir2
dir3
dir4

再次編輯

如果此String實際上處理文件路徑,則使用File類可能比使用字符串操作更可取。 類似File類已經考慮了處理文件路徑的所有復雜性,這些類將更加健壯。

在這種情況下,為什么不使用new File("prefix/dir1/dir2/dir3/dir4")並從那里開始?

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

output-- dir1 dir2 dir3 dir4

使用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的更多信息。

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

}

如果它是一個文件,您可以通過創建一個instanceof文件然后詢問它的段來獲取這些部分。

這很好,因為無論斜線的方向如何,它都能工作; 它是獨立於平台的(除了Windows中的“驅動器號”...)

String.split(String regex)很方便,但如果你不需要正則表達式處理,那么請使用substring(..)示例,java.util.StringTokenizer或使用Apache commons lang 1 不使用正則表達式時的性能差異可以是速度增加1到2個數量級。

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM