2017-04-15 34 views
1

我正在完成一項任務,此部分正在讓我絆倒。如果在另一個字符串中找到字符串,則將其替換爲空白字符

構造密碼1首先用矩陣中的唯一字母填充矩陣。

例如,如果密鑰是「testkey」,那麼用字母T,E,S,K,Y填寫密鑰

不要從密鑰中填充重複的字符。然後用矩陣的其餘字符填充矩陣(再次,跳過Q)。

不要重複出現在密鑰中的任何字符。因此,對於「密押」,cipher1看起來是這樣的:「

的密碼是一種5×5陣列通常充滿字母減去‘Q’的字母

所以如果。我的關鍵是密押,密碼會立即被填充"TESKYABCDFGHIJLMNOPRUVWXZ" instead of "ABCDEFGHIJKLMNOPRSTUVWXYZ".

我覺得像這樣的工作,但事實並非如此。

for (int i = 0; i < key.length(); i++) 
    { 
     key.toCharArray(); 
     alphabet.replace(key[i], ""); 
    } 

關鍵變量是字符串「TESTKEY」而字母變量也是包含「ABCDEFGHIJKLMNOPRSTUVWXYZ」的字符串。

現在看,代碼顯然有缺陷,現在我只是卡住了。請任何一個給我建議

+0

java中的字符串是不可變的。重新分配給字母變量由於調用replace而返回的新字符串。 –

+0

我建議你研究一下,看看Java字符串是不可變的,然後在你理解了之後再試一次。 –

回答

1

試試這個:

public static void main(String[] args) { 

    String testS = "testkey"; 
    String key = "ABCDEFGHIJKLMNOPRSTUVWXYZ"; 

    testS = testS.toUpperCase() + key; 
    testS = removeDuplicates(testS); 
    System.out.println(testS); 
} 

static String removeDuplicates(String string) { 

    StringBuilder noDuplicateChars = new StringBuilder(); 

    for (int i = 0; i < string.length(); i++) { 

     String letter = string.substring(i, i + 1); 

     if (noDuplicateChars.indexOf(letter) == -1) { 
      noDuplicateChars.append(letter); 
     } 
    } 

    return noDuplicateChars.toString(); 
} 

如果因爲某種原因你不想使用StringBuilder,你可以改變的removeDuplicates執行情況:

static String removeDuplicates(String string) { 

    String noDuplicates = new String(""); 

    for (int i = 0; i < string.length(); i++) { 

     if (!noDuplicates.contains("" + string.charAt(i))) { 
      noDuplicates += "" + string.charAt(i); 
     } 
    } 

    return noDuplicates; 
} 
+0

這工作完美,非常感謝你。 –

-1

你只需要使用正則表達式;

例如:1 - 鍵

input: testkey 
code: `String newString = input.replaceAll("(.)\\1{1,}", "$1").toUpperCase();` 
output: TESKY 

實施例2; CONCAT newString與alphapatical串

input: testkey + "ABCDEFGHIJKLMNOPRSTUVWXYZ"; 
code: `String FinalString = input.replaceAll("(.)\\1{1,}", "$1").toUpperCase();` 
output: TESKYABCDFGHIJLMNOPRUVWXZ 
+0

我懷疑這是老師的意圖,因爲他使用正則表達式。附:你的替換不起作用。 –

0

您可以使用LinkedHashSet。在for循環中添加key個字符,並在第二個循環中添加alphabet個字符。然後遍歷set元素並構建字符串。

請注意,如果方法add已存在於集合中,則不放置元素,因此不需要額外的檢查。

相關問題