我有一个这样的数组(来源)
[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;
我做错了什么?
答案 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;
基本算法
检查元素是否为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;
}