如何筛选NullString在Java

问题描述:

我是新来的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

你必须能够赋予一些参数......所以它西港岛线筛选正确 –

如何像这个 -

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

我认为你应该使用的番石榴库与String对象的工作。

对于你的问题有一个简单的答案有:Strings.isNullOrEmpty(stringObject)

如果你不喜欢番石榴有ApacheCommons等等。只是不要重新发明*。

您可以检查这样也,使用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

您可以使用“番石榴预处理”。 LINK

你必须要知道,当你启动Java应用程序,由JVM提供系统阵列指定参数和不包含空或空字符串。总之,一般就可以过滤数组是这样的:

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

fitlerNullString()的代码应该工作正常,你的说法正在传递可能不包含空值。