2013-12-16 49 views
0

我是新來的Java,下面的類工作:如何篩選NullString在Java

import java.lang.management.ManagementFactory; 
import java.lang.management.ThreadMXBean; 
import java.nio.ByteBuffer; 
import java.nio.ByteOrder; 
import java.util.ArrayList; 
import java.util.List; 
import org.apache.log4j.Logger; 

public class Utils { 

    public static String[] fitlerNullString(String[] array) { 
     List<String> list = new ArrayList<String>(); 
     for(String c : array) { 
      if(c != null && c.length() > 0) { 
       list.add(c); 
      } 
     } 
     return list.toArray(new String[list.size()]); 
    } 
} 

當我把這個,filternullstring函數返回什麼。
這裏是我的代碼:

private static Options options = new Options(); 
public static void main(String[] args) { 
    options.addOption("acom", "com", true, "abc"); 
    options.addOption("bcom", "command", true, "def"); 
    options.addOption("p", "play", true, "ghi"); 
    options.addOption("h", "help", false, "jkl"); 
    try { 
        String audioCOM = ""; 
     String commandCOM = ""; 
     args = Utils.fitlerNullString(args); 
     CommandLine cmd = parser.parse(options, args); 
if (cmd.hasOption("acom")) { 
      audioCOM = cmd.getOptionValue("com");; 
     } 
     if (cmd.hasOption("bcom")) { 
      commandCOM = cmd.getOptionValue("command");;  
     } 
    } 
} 

請指引我。我在哪裏犯了一個錯誤?請再次檢查我的代碼,因爲仍然沒有結果。

+0

你真的做'的Java MainClass args'時提供通過命令行任何東西(參數)? –

+0

如果它返回一個空白數組,則表明每個參數都爲空或爲空。你傳遞給應用程序的是什麼論點? – MasNotsram

+0

你必須能夠賦予一些參數......所以它西港島線篩選正確 –

回答

0

如何像這個 -

public static String[] fitlerNullString(final String[] array) { 

     // Return the original array if null or empty 
     if(array == null || array.length == 0) { 
      return array; 
     } 

     // Create a new array with the size of the passed array 
     String[] strings = new String[array.length]; 
     // For keeping track of indices of the new array 
     int ctr = 0; 

     for(int i = 0; i < array.length; i++) { 

      // If null or empty continue to the next item if any 
      if(array[i] == null || array[i].isEmpty()) { 
       continue; 
      } 

      // Otherwise add and increase the counter 
      strings[ctr] = array[i]; 
      ctr ++; 

     } 

     // return the array 
     return Arrays.copyOfRange(strings, 0, ctr); 

    } 

測試:

String[] vals = new String[3]; 
vals[0] = "Apple"; 
vals[1] = null; 
vals[2] = "Banana"; 

String a[] = fitlerNullString(vals); 

for(int j = 0; j < a.length; j++){ 
    System.out.print(a[j] + "\t"); 
} 
+0

sajal我檢查你的代碼的結果是一樣什麼回報,我想像if(cmd.hasOption(「acom」)){} {audioCOM = cmd.getOptionValue(「com」);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, } 如果(cmd.hasOption( 「管理學士學位」)){ commandCOM = CMD。getOptionValue( 「指令」);; } } } – user2971145

+0

@ user2971145您是否傳遞null?檢查我的編輯測試。 –

+0

hey sajral非常感謝你的代碼爲我工作 – user2971145

1

我認爲你應該使用的番石榴庫與String對象的工作。

對於你的問題有一個簡單的答案有:Strings.isNullOrEmpty(stringObject)

如果你不喜歡番石榴有ApacheCommons等等。只是不要重新發明輪子。

0

您可以檢查這樣也,使用isEmpty()

無需額外的庫所需的

if(Strings != null && !Strings.isEmpty()) 
+0

我想造成這樣的,如果(cmd.hasOption(「A」 )){ \t \t \t \t AUDIOCOM = cmd.getOptionValue( 「COM」);; \t \t \t}但CMD返回null – user2971145

+0

請檢查我的更新問題 – user2971145

+0

@ user2971145笏這是'parser.parse(選項,參數)' – Prateek

0

您可以使用「番石榴預處理」。 LINK

0

你必須要知道,當你啓動Java應用程序,由JVM提供系統陣列指定參數和不包含空或空字符串。總之,一般就可以過濾數組是這樣的:

List<String> argsList = new LinkedList<String>(Arrays.asList(args)); 
argsList.removeAll(Arrays.asList("", null)); 
0

fitlerNullString()的代碼應該工作正常,你的說法正在傳遞可能不包含空值。