2015-09-20 68 views
0

我是Java新手,仍然習慣於面向對象的編程(C程序員)。將命令行參數拆分爲字符串數組--- Java

的命令行參數:AB5,BC4,CD8,DC8,DE6,AD5,CE2,EB3,AE7

代碼:

public static void main(String[] args) 
{ 
    String[] edges = args[0].split("[, ]"); 

    for(int i = 0; i < 9; i++) 
     System.out.println(edges[i]); 
} 

我認爲它的作用:

這是應該使用空格和逗號作爲分隔符將第一個參數拆分爲一個字符串數組。我想打印出來,看看它是否是工作,但隨後它打印出來後「AB7」我得到這個消息:在線程

異常「主要」 java.lang.ArrayIndexOutOfBoundsException:1第8行

什麼我做錯了嗎?

+2

不要使用拆分。命令行參數到達數組中,因爲它們被空格分隔。 – laune

回答

0

請參見下面的代碼。命令行參數已經被空格分隔了,所以你不需要傳遞逗號分隔的字符串和調用split。

public class Test { 
    public static void main(String[] args) 
    { 
     String[] edges = args;//args[0].split("[, ]"); 

     for(int i = 0; i < edges.length; i++) 
      System.out.println(edges[i]); 
    } 
} 
-3

這實際上是在所有逗號和空格上分割。 「[,]」是一個正則表達式。你會得到這個例外,因爲你已經超出了邊緣數組的長度。

而不是9中的硬編碼,你應該在你的循環不變中使用數組的長度,而不是爲了避免這個問題。

public static void main(String[] args) 
{ 
    String[] edges = args[0].split("[, ]"); 

    for(int i = 0; i < edges.length; i++) 
     System.out.println(edges[i]); 
} 

在你的例子中,參數實際上已經在空間拆分並存儲在args數組中。

你可以忘記逗號,只是傳遞參數作爲:

AB5 BC4 CD8 DC8 DE6 AD5 CE2 EB3 AE7

然後遍歷他們是這樣的:

public static void main(String[] args) 
{ 
    for(int i = 0; i < args.length; i++) 
     System.out.println(args[i]); 
} 
0

您可以在args中使用單獨的命令行參數。但是,如果你的用戶堅持寫逗號作爲裝飾:

public static void main(String[] args){ 
    String[] edges = String.join(" ", args).split("[, ]"); 
    for(int i = 0; i < edges.length; i++) 
     System.out.println(edges[i]); 
    } 
} 

這也將擺脫逗號,如果有的話。

0

在Java中,你需要這個如下

1)創建一種模式,你的正則表達式

Pattern pattern = Pattern.compile("[ ,]") ; 

2)現在,你需要與之相匹配的對您輸入

Matcher matcher = pattern.matcher(input); 

3 )你可以打印如下

while(matcher.find()){ 
    System.out.println(String.format("found match of %s at %d and %d ", matcher.group(), matcher.start(), matcher.end())); 
} 

// sample code 
public static void main(String[] args){ 
StringBuilder sb = new StringBuilder(); 
    for(String arg: args){ 
     sb.append(arg); 
    } 

    Matcher matches = Pattern.compile("[ ,]").matcher(sb); 
    while(matches.find()){ 
     System.out.println(String.format("found match of %s at %d and %d ", matches.group(), matches.start(), matches.end())); 
    } 
}