2016-08-31 99 views
-3

好吧,我做了一个电话簿,做了如下Arraylist.indexOf()区分大小写

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

我已经完成它,它工作正常,除了一件事。如果名称存储为例如“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; 
} 
+1

最简单的方法是实现自己的indexOf方法并使用equalsIgnoreCase搜索字符串。或者你也可以重写数组列表的'indexOf'操作,但是我认为这个工作太多了。 – Codebender

+0

正如我删除的答案显示,这里没有快速修复。如果你用小写字母存储名字,那么你可以使用'name.indexOf(temp.toLowerCase())'这样的东西。但是,那么您将丢失存储数据中的案例分辨率。 –

+0

YOu可以使用'.toLowerCase()' –

回答

0

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

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

使用此方法befor存储任何东西到你的数组,然后索要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; 
} 

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

+0

当我调用capitalize()时,它给了我一个错误() “无法对类型Phonebook” – Heshamy

+0

“的非静态方法capitalize(String)进行静态引用,您必须添加大写方法到你的班级,你有你的开关/案例。如果你在问题中展示全班,我会告诉你你到底要做什么。 – xenteros

+0

@Heshamy使大写'公共静态',而不是'公共'方法 – xenteros

0
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; 
}