我有一个数组String ar[] = {"HalloWelt", " "};
,ar.length为2。
它确实在索引0的“ HalloWelt”中注册了两个值,并在索引1上注册了一个空白/空字符串;
我想知道如何删除索引1->上的空白空间,但又将其保留为String Array,因为下一个任务必须这样做。或如何进行大量转换,但最终还是得到String Array。
我的尝试
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 ;
};
逻辑很简单:
clearnArray
的大小。k
。clearnArray
作为大小创建k
。k
->将所有项添加到cleanArray直到k
。问题:.trim()和.isEmpty()没有记录索引为空。 ?!
答案 0 :(得分:1)
使用streams的解决方案:
String[] clean = Arrays.stream(ar)
.map(String::trim)
.filter(Predicate.isEqual("").negate())
.toArray(String[]::new);
请注意,这假设所有数组元素都不是null
。如果可能的话,只需在map
之前添加以下步骤:
.filter(Objects::nonNull)
答案 1 :(得分:0)
在您的方法中,创建一个新的
List cleanedList = new ArrayList();
通过ar [] ar [] = [“ HalloWelt”,“”]进行迭代,然后仅将非空值添加到已清理的List...。然后返回该数组。
return cleanedList.toArray()
如下所示:
List<String> cleanedList = new ArrayList<>();
for(String s : arr) {
s = s.trim();
if(!s.isEmpty()) {
cleanedList.add(s);
}
}
return cleanArray.toArray();
答案 2 :(得分:0)
您的代码存在的问题是,在计数找到k
之后,您只需编写原始数组中的前k
个元素。为了通过您的技术解决问题,您需要再次检查输入数组的每个元素以查看其是否为空(修剪后),然后仅将通过测试的元素写入新数组。
可以使用“增强型” for
循环来简化代码,因为您不需要原始数组的索引。 (变量i
跟踪 new 数组中的当前索引。)另请注意,字符串是不可变的,因此如果不使用结果随处可见。您的代码还引用了未定义的.trim()
,所以我更改了它。
bsp
答案 3 :(得分:0)
计算非null元素的数量并创建该大小的数组,例如
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;
您还可以使用流来使它更漂亮。但是,我还没有使用Java中的流功能,所以在那里我无能为力。
注意两点:
除非您要序列化或null导致其他问题,否则修剪数组只是为了摆脱null可能不会对内存造成影响,因为数组条目的大小(4个字节)为很有可能与分配给Array对象的内存块大小无关紧要
先转换为List
,然后再转换为数组是很懒的,可能效率很低。例如,ArrayList可能会在内部创建的数组中包含额外的空间,这样您就可以向ArrayList中添加更多元素,而不必创建一个全新的内部数组。