2017-03-01 121 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 
相关问题