如何测试字符串数组以查找特定字符串是否在数组中?

时间:2016-02-25 10:45:39

标签: java arrays

到目前为止,我已经拥有了这部分代码。编译精细,运行良好。但是如果我选择在列表中插入一个不排名的等级,它仍会打印我输入的值。

private String         Rank;  //string r
private static String[] Ranks = {"Assistant", "Associate", "Full"};

public professor(String n, int a, int s, String r, int nc, int pp)
{
    super(n, a, s);
    setRank(r);
    setNumCo(nc);
    setPubPaps(pp);
}
//mutator to set the Rank and check to make sure it is in the string list
public void setRank(String r)
{
    boolean check = false;

    List valid = Arrays.asList(this.Ranks);

    if(valid.contains(r)) 
        check = true;

    if(check = true)
        this.Rank = r;
    else
        this.Rank = "Associate";
}

以下是我所谈论的一个例子:

 professor p2 = new professor ("Muench", 50, 222344455, "False", 3, 45);

"假"绝对不在排名列表中,但它仍然会在我的打印窗口中打印如下 虚假教授Muench ....

4 个答案:

答案 0 :(得分:1)

像这样写它会起作用并且更具可读性

List valid = Arrays.asList(this.Ranks);

if(valid.contains(r)) 
    this.Rank = r;
else
    this.Rank = "Associate";

这是有效的,因为.contains方法返回一个布尔值,所以当返回值时,你基本上会得到if(true)if(false)

答案 1 :(得分:0)

if(valid.contains(r)) 
        check = true;

    if(check == true)
        this.Rank = r;
    else
        this.Rank = "Associate";

答案 2 :(得分:0)

您也可以使用字符串数组(不将数组转换为列表)来执行此操作:

public void setRank(String r)
{
  for ( final String rank : professor.Ranks ) // Static reference to Ranks class variable.
  {
    if ( rank.equals( r ) )
    {
      this.Rank = r;
      return;
    }
  }
  this.Rank = "Associate";
}

您还有一个奇怪的命名约定:

  • 当通常使用(或驼峰式)类名称时,类professor完全是小写的。
  • 当正常惯例是使用小写时,属性Rank已成为国会。

答案 3 :(得分:0)

使用 Java 8

如果区分大小写

[:fr]

如果不区分大小写

public void setRank(String r){
       this.Rank = Stream.of(Ranks).filter(p->p.equals(r)).findAny().orElse("Associate");
}