2017-03-01 122 views
0

因此,如題目所示,我有一個作業問題,我遇到了麻煩。只使用基本的字符串方法(length,charAt,substring,equals,equalsIgnoreCase)和循環,我必須替換用戶輸入字符串中所有字符的實例,並用新字符替換用戶想要的新字符舊。我不知道如何在不使用indexOf的情況下找到並存儲字符串字符的所有實例。這是我寫的一些基本代碼,我們將不勝感激。我不知道如何只用這些基本的字符串方法替換一個字符的所有實例。僅使用循環替換字符串中的所有字符實例

 String letter; 

     System.out.println("Enter the character you want to replace"); 
     input = keyboard.nextLine(); 

     int characterAt = 0; 
     for (characterAt = 0; characterAt < savedInput.length(); characterAt++) 
     { 
      letter = "" + savedInput.charAt(characterAt); 
       if(input.equals(letter)) 
      { 
       System.out.println("Enter the new character"); 
       input = keyboard.nextLine(); 
       System.out.println("The new string is: "); 

      } 
     } 

回答

1

有幾種方法可以做到這一點。您可以將String轉換爲characters - String#toCharArray的數組。然後你需要迭代數組並用新值替換char。

char[] chars = "lorem ipsum sit amet".toCharArray(); 
char newValue = 'X'; 
for (int i = 0; i < chars.length; i++) { 
     if (chars[i] == 'm') { 
      chars[i] = newValue; 
     } 
} 
System.out.println(new String (chars)); // loreX ipsuX sit aXet 

您可能需要使用StringBuilder類似的解決方案:

StringBuilder builder = new StringBuilder("lorem ipsum sit amet"); 
char newValue = 'X'; 
for (int i = 0; i < builder.length(); i++) { 
    if (builder.charAt(i) == 'm') { 
     builder.setCharAt(i, newValue); 
    } 
} 
System.out.println(builder); // loreX ipsuX sit aXet 

你甚至可以使用stream API對於還有:

String newString = "lorem ipsum sit amet".chars().map(el -> { 
    if ((char) el == 'm') { 
     return 'X'; 
    } else { 
     return el; 
    } 
}).collect(StringBuilder::new, 
     StringBuilder::appendCodePoint, StringBuilder::append) 
     .toString(); 
System.out.println(newString); // loreX ipsuX sit aXet 
相關問題