【问题标题】:Arraylist.indexOf() case sensitive [duplicate]Arraylist.indexOf() 区分大小写
【发布时间】:2017-01-07 20:49:50
【问题描述】:

好的,我已经制作了一个电话簿,可以执行以下操作,

  1. 添加新联系人
  2. 编辑联系人的电话
  3. 删除联系人
  4. 按名称搜索
  5. 电话搜索
  6. 查看所有联系人
  7. 恢复出厂设置
  8. 退出

我已经完成了它并且它工作正常,除了一件事。如果存储了一个名称,例如“John”,而用户搜索“john”,它会打印“not found”,因为 j 没有大写,我怎样才能解决这个问题而不会搞砸我的代码。

这里是案例 2 的代码。

case 2: {
    System.out.println("Enter the contact name you want to edit");
    temp=s.next();
    int z=name.indexOf(temp);
    if(z!=-1)
    {
        System.out.println("Edit to?");
        temp=s.next();
        name.set(z, temp);
        System.out.println("Name edited to "+temp);
    }
    else
        System.out.println("Name not found");
    break;
}

【问题讨论】:

  • 最简单的方法是实现自己的indexOf 方法并使用equalsIgnoreCase 搜索字符串。或者你也可以覆盖 arraylist 的 indexOf 操作,但我认为这对这份工作来说太过分了。
  • 正如我删除的答案所揭示的那样,这里没有快速修复。如果您以全小写形式存储名称,则可以使用name.indexOf(temp.toLowerCase()) 之类的名称。但是,您将丢失存储数据中的案例解决方案。
  • 你可以使用.toLowerCase()

标签: java


【解决方案1】:

如果您希望所有名称都以大写字母开头,您只能以这种方式存储它们,然后以这种方式打印。以下代码将有所帮助:

private String capitalize(String name) {
    String s1 = name.substring(0, 1).toUpperCase();
    String nameCapitalized = s1 + name.substring(1).toLowerCase();
    return nameCapitalized;
}

在将任何内容存储到您的数组之前使用此方法,然后请求capitalize(name);的第一次出现

在你的情况下:

case 2: {
    System.out.println("Enter the contact name you want to edit");
    temp=s.next();
    int z=name.indexOf(capitalize(temp));
    if(z!=-1)
    {
        System.out.println("Edit to?");
        temp=s.next();
        name.set(z, capitalize(temp));
        System.out.println("Name edited to "+capitalize(temp));
    }
    else
        System.out.println("Name not found");
    break;
}

这种方法可以让您将所有名称保持在相同的约定中 - 名称以大写字母开头。

【讨论】:

  • 当我调用 capitalize() 时出现错误“无法从电话簿类型中对非静态方法 capitalize(String) 进行静态引用”
  • 您必须将大写方法添加到您拥有开关/案例的类中。如果你在问题中展示全班同学,我会告诉你具体需要做什么。
  • @Heshamy 大写 public static 而不是 publicmethod
  • 是的,我做到了,在“public class Phonebook {”之后添加了它
【解决方案2】:
You can do like this. convert it into lowercase
case 2: {
System.out.println("Enter the contact name you want to edit");
temp=s.next();
int z=name.indexOf(temp.toLowerCase());
if(z!=-1)
{
    System.out.println("Edit to?");
    temp=s.next();
    name.set(z, temp);
    System.out.println("Name edited to "+temp);
 }
 else
    System.out.println("Name not found");
 break;
}

【讨论】:

    猜你喜欢
    • 2012-12-01
    • 2013-03-06
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2016-11-24
    • 2012-02-12
    相关资源
    最近更新 更多