import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class NNNTest {
private String SkillNeed="Java;C++;C";
private String SkillHave="SQL:8;Java:9;C++:5;C:9;PHP:5";
public boolean CheckAvailable(){
int flag=0;
int k;
String [] snar=SkillNeed.split(";");
String [] shandlevel=SkillHave.split(";");
for(int i=0;i<snar.length;i++){
for(k=0,flag=0;k<shandlevel.length;k++){
if(shandlevel[k].split(":")[0].equals(snar[i])){
System.out.println(shandlevel[k].split(":")[0]);
flag=1;
}
}
if(flag==0){
break;
}
}
if(flag==1){
System.out.println("YES");
return true;
}
else{
System.out.println("NO");
return false;
}
}
public static void main(String[] args) {
NNNTest n=new NNNTest();
n.CheckAvailable();
}
}
该方法检查您是否有足够的技能来获得这份工作。
SkillNeed是一个字符串,具有形式&#34;技能;技能;技能......&#34;
SkillHave是你拥有的技能和水平,并且具有形式&#34;技能:等级;技能:等级; ......&#34;
这些是我输入的代码,但我觉得它很长很无聊,你还有其他改进方法的方法吗?比如跳过循环或数组或使用java给定的方法。
答案 0 :(得分:2)
简单地使用java-8:
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
public class NNNTest {
private static String skillNeed = "Java;C++;C"; //the skills the job need
private static String skillHave = "SQL:8;Java:9;C++:5;C:9;PHP:5"; //skill and level you have
public static boolean checkAvailable() { //if all the job needed skills match the skills you have
return Arrays.stream(skillHave.split(";")).map(s -> s.split(":")[0]).collect(Collectors.toSet()).containsAll(Arrays.asList(skillNeed.split(";")));
}
public static void main(String[] args) {
System.out.println(checkAvailable());
}
}
编辑解释:
答案 1 :(得分:1)
另一个Java 8解决方案.. 它基本上遍历所有必需的技能,并确保使用allMatch()函数,每个技能都包含在givenSkills-String中。请记住,您必须检查&#34;:&#34;否则,&#34; C&#34;也会匹配&#34; C ++&#34;。这也确保了它与技能完全匹配,因为技能要么在开头,要么被封闭;并且:。
public static boolean checkForRequiredSkills(String requiredSkills, String givenSkills)
{
return Arrays.stream(requiredSkills.split(";")).allMatch(skill -> givenSkills.startsWith(skill + ":") || givenSkills.contains(";" + skill + ":"));
}
早期java版本中的类似解决方案可能看起来像这样
public boolean checkAvailable()
{
for (String skill : skillNeed.split(";"))
{
if (!skillNeed.startsWith(skill + ":") && !skillHave.contains(";" + skill + ":"))
return false;
}
return true;
}
迭代数组或列表的首选习惯用法是使用for-each循环..
for(String str : stringArray)
doSomething(str);