2016-08-31 147 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; 
}