Java:从字符串数组中删除空元素

Java:从字符串数组中删除空元素,java,arrays,string,is-empty,Java,Arrays,String,Is Empty,我有一个数组字符串ar[]={“hallowlt”,“”},ar。长度为2 它在索引0的“hallowlt”中注册了两个值,在索引1中注册了一个空字符串 我想知道如何删除索引1->上的空白,但同时将其保留为字符串数组,因为这是下一个任务所必需的。或者如何进行一系列转换,但最终得到字符串数组 我的尝试 public String[] arraysWhiteSpaceEliminator(String[] arr) { int k=0; //Identify how big t

我有一个数组
字符串ar[]={“hallowlt”,“”},ar。长度为2

它在索引0的“hallowlt”中注册了两个值,在索引1中注册了一个空字符串

我想知道如何删除索引1->上的空白,但同时将其保留为字符串数组,因为这是下一个任务所必需的。或者如何进行一系列转换,但最终得到字符串数组

我的尝试

public String[] arraysWhiteSpaceEliminator(String[] arr) {

        int k=0;   //Identify how big the array should be i.e. till it reaches an empty index.

        for(int i=0; i<bsp.length;i++) {
            arr[i].trim();
            System.out.println(arr[i].isEmpty());
            if(arr[i].isEmpty()) {
            }
            else {
                k = k+1; //if the index isn't empty ==  +1;
            }

        }

        String[] clearnArray = new String[k];
        for(int s = 0; s<k; s++) {
            clearnArray [s] = arr[s];  //define New Array till we reach the empty index.
            //System.out.println(clearnArray [s]+" " +s); 
        }

        return clearnArray ;

    };
public String[]arraysWhiteSpaceEliminator(String[]arr){
int k=0;//确定数组应该有多大,即直到它达到一个空索引为止。

对于方法中的(inti=0;i,创建一个新的

List cleanedList = new ArrayList();
通过ar[]ar[]=[“Hallowlt”、“”]添加迭代,并仅将非空值添加到清理列表中……然后返回数组

return cleanedList.toArray()
如下图所示:

List<String> cleanedList = new ArrayList<>();

for(String s : arr) {
    s = s.trim();
    if(!s.isEmpty()) {
        cleanedList.add(s);
    }
}

return cleanArray.toArray();
List cleanedList=new ArrayList();
用于(字符串s:arr){
s=s.修剪();
如果(!s.isEmpty()){
已清除列表。添加;
}
}
返回cleanArray.toArray();

您的代码的问题是,在计数以查找
k
之后,您只需从原始数组中写入第一个
k
元素。要使用您的技术解决此问题,您需要再次检查输入数组的每个元素,以查看其是否为空(修剪后),并仅将通过测试的元素写入新数组

可以使用
循环的“增强”
来简化代码,因为您不需要原始数组的索引。(变量
i
跟踪新数组中的当前索引。)还要注意字符串是不可变的,因此调用
.trim()
如果不在任何地方使用结果,则不会执行任何操作。您的代码还引用了未定义的
bsp
,因此我对其进行了更改

intk=0;
用于(字符串s:arr){
s=s.修剪();
如果(!s.isEmpty()){
k++;
}
}
String[]cleanArray=新字符串[k];
int i=0;
用于(字符串s:arr){
s=s.修剪();
如果(!s.isEmpty()){
清洁阵列[i]=s;
i++;
}
}
返回数组;

计算非空元素的数量并创建一个该大小的数组,如

String[] strs = ...;
int count = 0;
for (int i = 0; i < strs.length; i++) {
  if (strs[i] != null) count++;
}
String newStrArray[] = new String[count];
int idx = 0;
for (int i = 0; i < strs.length; i++) {
  if (strs[i] != null) newStrArray[idx++] = strs[i];
}
return newStrArray;
String[]strs=。。。;
整数计数=0;
对于(int i=0;i
你也可以使用streams让它变得更漂亮。但是我没有在Java中使用流功能,所以我不能帮你

有两点需要注意:

  • 除非您正在序列化或空值导致其他问题,否则修剪数组以消除空值可能不会对内存产生影响,因为数组项的大小(4字节)很可能与为数组对象分配的内存块大小无关

  • 首先转换为
    列表
    ,然后再转换回数组是懒惰的,可能效率低下。例如,ArrayList可能会在其内部创建的数组中包含额外的空间,以便您可以向ArrayList添加更多元素,而不必创建一个全新的内部数组

  • 解决方案包括:

    请注意,这假设所有数组元素都不是
    null
    。如果可能,只需在
    映射之前添加以下阶段即可:

    .filter(Objects::nonNull)
    

    字符串ar[]=[“Hallowlt”,];
    无效。数组是如何初始化的?这是否回答了您的问题?字符串内容=新字符串(Files.readAllBytes(path),Charset.defaultCharset());字符串[]数据=内容。拆分(,\\R”);内容->读取文件信息块。这些块通常被“,”分割最后一个也是在最后一个之后没有任何信息->这是空白的来源。如果你想(a)调整数组的大小以排除空白字符串,还不清楚,(b)将空白字符串转换为空字符串,(c)将空白字符串改为空这是否回答了您的问题?谢谢您的回答!!!谢谢您的回答!!!谢谢您的回答!!!一本好书:它非常有效!谢谢!
    .filter(Objects::nonNull)