2014-04-03 87 views
0

我需要編寫一個程序,它以字符串形式輸入密碼作爲輸入。Java程序 - 密碼檢查器

我不得不做出一個數組最常見的密碼,我能想到的第15條,確保沒有任何這些常見的密碼都包含在用戶密碼中。我嘗試了多個選項,但大多數只是返回一條錯誤消息,指出類似「字符串索引超出範圍」。

這是我最近一次嘗試。

for(int i = 0; i < commonPass.length; i++) 
{ 
    if (password.indexOf(commonPass[i]) > 0) 
    { 
    System.out.println("Enter new password."); 
    password = kb.nextLine(); 
    } 
} 

我的java知識是相當基本的,所以提供的任何幫助將不勝感激。

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 
String index out of range: 8 at java.lang.String.charAt(Unknown Source) at PasswordProgram.main(PasswordProgram.java:95) 
+2

堆棧跟蹤,請:) – OrhanC1

+0

我假設你的意思是這樣的:異常線程 「main」 java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:8 \t at java.lang.String.charAt(Unknown Source) \t at PasswordProgram.main(PasswordProgram.java:95) 正如我所說我的知識是非常基礎的。 :L – user3494937

+1

注意,如果兩個密碼一致/了'password'開頭的'commonPass [I]''然後的indexOf()'將返回0,所以它應該是> = 0 – vandale

回答

3

使用包含函數來檢查,如果字符串包含的繩子。

for(int i = 0; i < commonPass.length; i++) 
{ 
    if (password.contains(commonPass[i])) 
    { 
    System.out.println("Enter new password."); 
    password = kb.nextLine(); 
    } 
} 

從Java文檔(http://docs.oracle.com/javase/7/docs/api):

包含(CharSequence中):返回true當且僅當此字符串包含char值的指定序列。

我已經測試了下面的代碼,並且應能正常工作。祝您好運!

private void CheckPassword() 
{ 
    String[] commonPass = new String[4]; 
    commonPass[0] = "testing"; 
    commonPass[1] = "stackoverflow"; 
    commonPass[2] = "coding"; 
    commonPass[3] = "userinput"; 

    Scanner s = new Scanner(System.in); 

    System.out.println("Enter your password."); 
    String password = s.nextLine(); 

    for(int i = 0; i < commonPass.length; i++) 
    { 
     if (password.contains(commonPass[i])) 
     { 
      CheckPassword(); 
     } 
    }  

} 
+0

雖然這個想法是正確的,但這個代碼將不得不被修改,以便當用戶輸入一個新的密碼時,你必須再次檢查commom密碼數組中的所有密碼。 – Alvin

+0

Thnx指出。增加了一些修復該問題的額外代碼。 – ronaldm

+1

這很好,謝謝大家給出的意見。真棒的網站,真棒的人。如果我需要任何幫助,我一定會回來。 – user3494937

0

這應該有效。看看這有助於 -

String[] commonPassword = {"pass1","pass2"} 
ArrayList<String> passwordList = new ArrayList<String>(Arrays.asList(commonPassword)); 
String password = ""; 
do{ 
    System.out.println("Enter new password."); 
    password = kb.nextLine(); 
}while(passwordList.contains(password)); 

請注意,您需要導入 -

import java.util.ArrayList; 
import java.util.Arrays; 
+0

「...確保這些常見密碼都不包含在**用戶密碼**內**。您正在檢查列表中是否包含密碼。順便說一下,'「」'的初始賦值是虛假的。 –

+0

從OP,我的理解是OP有預先確定的密碼列表,並且要求是要求用戶輸入新密碼,如果輸入的密碼是預定列表中的密碼之一。 – hellboy

+0

試過這個,但是程序跳過了用戶需要輸入新密碼的部分。 – user3494937

-1

ü要匹配密碼,因此使用爲什麼ü使用的indexOf .equals。

+0

OP正在檢查一個普通密碼是否位於可能的用戶密碼的任何地方。 –

+0

說實話,我確實嘗試過,但我仍然得到錯誤。我剛剛跑出耐心,決定嘗試一切。 – user3494937

0

這工作

@Test 
public void test(){ 

    String password = "dfsdf"; 
    String[] commonPass= new String[] {"bla", "blu", "blo", "bly", "ble", "bli"}; 

    for(int i = 0; i < commonPass.length; i++) 
    { 
     if (password.equalsIgnoreCase(commonPass[i])) 
     { 
     System.out.println("Enter new password."); 

     } 
    } 
} 
1

在這裏,你去..

進口的java.util.ArrayList; import java.util.Arrays;

公共類密碼{

public static void main(String[] args) { 
    boolean wrongpassword= true; 

    ArrayList<String> knownPasswordList = new ArrayList<String>(); 

    knownPasswordList.add("password1"); 
    knownPasswordList.add("password2"); 
    knownPasswordList.add("password3"); 
    knownPasswordList.add("password4"); 

    String password = ""; 

    do 
    { 
     System.out.println("Enter New Password"); 
password = kb.nextLine(); 
    }while(knownPasswordList.contains(password)); 

} 

}