2013-09-28 55 views
0

我正在處理一個具有幾個獨立部分的類分配,除了這個之外,我已經完成了這些任務。我需要從用戶獲取一個字符串輸入,並創建一個循環(最好是for循環),在每個字符之間插入星號。我完全沉迷於這一個,所以如果有人可以給我一些幫助,開始它將不勝感激。Java - 在用戶輸入的字符串之間添加星號

編輯:我想出這個至今

} else if (choice.equalsIgnoreCase("C")) { 
     System.out.print("Enter text here: "); 
     String orig = input.nextLine(); 

     // To use for asterisk insertion 
     int x = 1; 
     int y = 2; 

     for (int length = orig.length(); length > 0;) { 
      orig = orig.substring(0,x) + "*" + orig.substring(y); 
      x = x + 2; 
      y = y + 2; 
     } 

    } 

它編譯就好了,但是當我測試,並輸入一些文字它與線程「主」的java.lang 異常出現。的StringIndexOutOfBoundsException:字符串索引超出範圍:5

+2

到目前爲止您嘗試過哪些方法?哪裏遇到麻煩?另外,爲什麼「(最好是for循環)」?爲什麼它使用什麼樣的循環? – nhgrif

+0

這是一個循環分配。我們需要使用一個,do-while和for循環。 for循環是我沒有使用的唯一一個。我知道我需要使用.substring(x,y)方法,但我不確定如何設置它,以便循環在用戶輸入的字符串的每個字符之間插入星號。 – user2827341

回答

3

你可以使用一個用於在字符串中的字符環(見下文),但我只是這樣做:

str = str.replaceAll("(?<=.)(?=.)", "*"); 

搜索參數中的正則表達式匹配任何兩個字符之間的點,通過使用後視和前瞻來實現,每個斷言都存在一個字符。


如果你必須使用一個循環中,簡單代碼大概是:

String result = input.isEmpty() ? "" : input.substring(0, 1); 
for (int i = 1; i < input.length(); i++) 
    result += "*" + input.charAt(i); 

的有些複雜一線迎合進入一個空白的用戶的邊緣情況。 for循環已經迎合了空白輸入,因爲終止條件對於空白將始終爲假,因此它根本不會迭代。

+0

不幸的是我必須爲此使用一個循環。謝謝你。 – user2827341

+0

查看編輯答案爲優雅(恕我直言)循環解決方案。如果你使用代碼,確保你完全理解它,所以這仍然是一個學習經驗。 – Bohemian

相關問題