如何基于另一个创建更短的数组?

时间:2018-03-24 17:58:05

标签: java arrays

我有一个这样的数组(来源)

[Maria Carolina, Luisa Joana, Lara Silva, Catarina Patricio, Paula Castro, fim, null, null, null]

我想要一个像那样的目的地(目的地)

[Maria Carolina, Luisa Joana, Lara Silva, Catarina Patricio, Paula Castro]

在以下代码中,i是名称的数量 我的代码是:

String[] nomeCompleto = new String[10];
String[] nomes = new String[10-i];
if(i < 10) {
    nomes[i] = nomeCompleto[i];
}
System.out.println(Arrays.toString(nomes));

return;

我做错了什么?

2 个答案:

答案 0 :(得分:-1)

编辑:这个问题提供了一个基于数组索引的源代码片段,因此我的原始答案是:

使用Arrays课程为您完成此操作。

String[] names = new String[] {"Maria Carolina", "Luisa Joana", "Lara Silva", "Catarina Patricio", "Paula Castro", "fim", null, null, null};
String[] truncated = java.util.Arrays.copyOf(names, names.length-4); // remove the last 4 names
System.out.println(java.util.Arrays.toString(truncated));

在线试用here

编辑:由于人们(不是OP)对此不满意,我补充说:或者,要仅匹配表单Firstname Lastname的名称,请使用正则表达式:< / p>

String[] input = new String[] {"Maria Carolina", "Luisa Joana", "Lara Silva", "Catarina Patricio", "Paula Castro", "fim", null, null, null};
List<String> namesList = new ArrayList<>();
for(String name : input) {
    if(name != null && name.matches("^[A-Z][A-z]+ [A-Z][a-z]+$"))
        namesList.add(name);
}
String[] namesArray = namesList.toArray(new String[0]);
System.out.println(Arrays.toString(namesArray));

在线试用here

修改:最后,由于Dukeling在葡萄牙语中对fim含义end发表评论,因此可能会有更好的解决方案:

使用循环查找fim的第一个匹配项,然后相应地截断数组(如我的答案中的第一个代码段)。

String[] names = new String[] {"Maria Carolina", "Luisa Joana", "Lara Silva", "Catarina Patricio", "Paula Castro", "fim", null, null, null};
int newLength = names.length;
for(int i = 0; i < names.length; i++) {
    if("fim".equals(names[i])) {
        newLength = i;
        break;
    }
}
String[] truncated = java.util.Arrays.copyOf(names, newLength);
System.out.println(java.util.Arrays.toString(truncated));

在线试用here

答案 1 :(得分:-1)

根据问题的理解问题陈述如下

给定一个String的主数组,我们需要返回另一个数组,其中包含带有null元素的master元素和带有值&#34; fim&#34;的元素。除去。

中间可以有空元素,在最后一个元素中不需要元素和元素相同的元素&#34; fim&#34;

基本算法

  1. 迭代主数组
  2. 计算null&amp;的数量fim元素,创建size =的副本数组 主数组大小 - 空元素计数
  3. 检查元素是否为null,如果不为null,则添加到复制数组

    public String[] removeNullNFimElementsFromArray(String[] master) {
        int nullNFimCount = 0;
        int masterSize = master.length;
        for(int i = 0; i < masterSize; i++) {
            if(master[i] == null || "fim".equals(master[i])) {
                nullNFimCount++;
            }
        }
        int copySize = masterSize - nullNFimCount;
        String[] copyArray = new String[copySize];
        for(int i = 0, j = 0; i < masterSize; i++) {
            if(master[i] != null && !"fim".equals(master[i])) {
                copyArray[j] = master[i];
                j++;
            }
        }
        return copyArray;
    }