如何在Java中替换字符串中的字符而不使用.replace?
该程序的目标是提示用户输入单个字符和短语,然后用“$”替换该短语中该字符的任何实例。我下面的程序就是这么做的,但当我向教授展示它时,我被告知我不能使用。替换我构建的方法,所以我必须找到一种不使用它的方法。我已经做了一段时间了,到目前为止,我知道我可以用for循环来代替它,但是在几次令人沮丧的迭代之后,我似乎无法正确地完成它。如果我的代码看起来很时髦,请原谅,我还是java入门的学生,所以我还在学习基础知识。我在下面的代码片段末尾提供了一个建议的解决方案如何在Java中替换字符串中的字符而不使用.replace?,java,string,Java,String,该程序的目标是提示用户输入单个字符和短语,然后用“$”替换该短语中该字符的任何实例。我下面的程序就是这么做的,但当我向教授展示它时,我被告知我不能使用。替换我构建的方法,所以我必须找到一种不使用它的方法。我已经做了一段时间了,到目前为止,我知道我可以用for循环来代替它,但是在几次令人沮丧的迭代之后,我似乎无法正确地完成它。如果我的代码看起来很时髦,请原谅,我还是java入门的学生,所以我还在学习基础知识。我在下面的代码片段末尾提供了一个建议的解决方案 public static char ge
public static char getKeyCharacter(String userInput) {
char keyCharacter;
Scanner inputStream = new Scanner(System.in);
while(userInput.length() > 1)
{
System.out.println("Please enter a SINGLE character to use as key: ");
userInput = inputStream.nextLine();
}
keyCharacter = userInput.charAt(0);
return keyCharacter;
}
public static String getString(String userResponse) {
Scanner inputStream = new Scanner(System.in);
String theString;
while(userResponse.length() > 500) {
System.out.println("Please enter a phrase or sentence >= 4 and <=500 characters: ");
userResponse = inputStream.nextLine();
}
while(userResponse.length() < 4) {
System.out.println("Please enter a phrase or sentence >= 4 and <=500 characters: ");
userResponse = inputStream.nextLine();
}
theString = userResponse;
return theString;
}
public static String maskCharacter(String theString, char keyCharacter){
String maskedString = "";
final char mask = '$';
maskedString = maskedString + theString.replace(keyCharacter, mask);
System.out.println("String with " + keyCharacter + " masked: ");
return maskedString;
}
public static String removeCharacter(String theString, char keyCharacter) {
String modifiedString = " ";
final char replaceChar = ' ';
modifiedString = modifiedString + theString.replace(keyCharacter, replaceChar);
System.out.println("String with " + keyCharacter + " removed:");
return modifiedString;
}
public static int countKey(String theString, char keyCharacter) {
int charCount = 0;
for (int c = 0; c < theString.length(); c++) {
if (theString.charAt(c) == keyCharacter) {
charCount++;
}
}
System.out.println("Occurences of " + keyCharacter + " in string:");
return charCount;
}
publicstaticchargetkeycharacter(stringuserinput){
字符键字符;
扫描仪输入流=新扫描仪(System.in);
while(userInput.length()>1)
{
System.out.println(“请输入一个字符作为键:”);
userInput=inputStream.nextLine();
}
keyCharacter=userInput.charAt(0);
返回键字符;
}
公共静态字符串getString(字符串用户响应){
扫描仪输入流=新扫描仪(System.in);
串这个串;
while(userResponse.length()>500){
System.out.println(“请输入一个短语或句子>=4和=4,我会使用StringBuilder
和String#tocharray()
,每个循环都有一个简单的。比如
public static String maskCharacter(String theString, char keyCharacter){
StringBuilder sb = new StringBuilder();
for (char ch : theString.toCharArray()) {
if (ch == keyCharacter) {
sb.append('$'); // <-- mask keyCharacter(s).
} else {
sb.append(ch); // <-- it isn't the character to mask
}
}
return sb.toString();
}
公共静态字符串maskCharacter(字符串,char-keyCharacter){
StringBuilder sb=新的StringBuilder();
for(char ch:theString.toCharArray()){
if(ch==keyCharacter){
sb.append(“$”);//我不会使用StringBuilder
:直接使用tocharray()的结果即可:
char[] cs = theString.toCharArray();
for (int i = 0; i < cs.length; ++i) {
if (cs[i] == keyCharacter) cs[i] = '$';
}
return new String(cs);
char[]cs=theString.tocharray();
对于(int i=0;i
它不仅更加简洁,而且:
- 它将运行得更快,因为访问数组元素比调用方法更便宜;而且它不需要StringBuilder的内部缓冲区来调整大小(尽管您可以预先调整大小)
- 它将使用更少的内存,因为它不需要在StringBuilder中存储副本
公共静态字符串maskCharacter(字符串,char-keyCharacter){
String-masked=“”;
对于(int i=0;i
}仅使用字符串连接和基本字符访问的答案
您似乎知道可以将某些内容连接到字符串,然后得到不同的字符串
maskedString = maskedString + ...;
您还知道可以使用.charAt()
…假设您了解其他分支,您是否需要将它们组合在一起
if (nch == keyCharacter) {
// append '$' to maskedString
}
else {
// append nch to maskedString
}
当然,这会在每次循环迭代中创建一个新字符串,因此效率不高。但我认为这不是练习的重点。字符串在Java中是不可变的。您不需要“替换”字符串中的字符,而是要构建一个新字符串(例如,使用StringBuilder
)它包含替换了适当字符的原始字符串。好吧,你问过教授该用什么来代替吗?我认为他的工作是教你……而replace
是解决此类问题的通常且可能是最有效的方法。@JimGarrison,谢谢你,这是很好的信息!我正在研究StringBuild“呃,现在只是为了我的知识。”CarlosHeuberger我问他,他说我最好的办法是使用for循环,在多次失败后,我向她求助。我想他不会让我们使用它,只是为了我们得到一些额外的练习。不是一个完全相同的循环,但任何超过的循环都应该有效。
maskedString = maskedString + ...;
for (int k = 0; k < theString.length(); k++) {
char nch = theString.charAt(k);
}
if (nch == keyCharacter)
if (nch == keyCharacter) {
// append '$' to maskedString
}
else {
// append nch to maskedString
}