Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中替换字符串中的字符而不使用.replace?_Java_String - Fatal编程技术网

如何在Java中替换字符串中的字符而不使用.replace?

如何在Java中替换字符串中的字符而不使用.replace?,java,string,Java,String,该程序的目标是提示用户输入单个字符和短语,然后用“$”替换该短语中该字符的任何实例。我下面的程序就是这么做的,但当我向教授展示它时,我被告知我不能使用。替换我构建的方法,所以我必须找到一种不使用它的方法。我已经做了一段时间了,到目前为止,我知道我可以用for循环来代替它,但是在几次令人沮丧的迭代之后,我似乎无法正确地完成它。如果我的代码看起来很时髦,请原谅,我还是java入门的学生,所以我还在学习基础知识。我在下面的代码片段末尾提供了一个建议的解决方案 public static char ge

该程序的目标是提示用户输入单个字符和短语,然后用“$”替换该短语中该字符的任何实例。我下面的程序就是这么做的,但当我向教授展示它时,我被告知我不能使用。替换我构建的方法,所以我必须找到一种不使用它的方法。我已经做了一段时间了,到目前为止,我知道我可以用for循环来代替它,但是在几次令人沮丧的迭代之后,我似乎无法正确地完成它。如果我的代码看起来很时髦,请原谅,我还是java入门的学生,所以我还在学习基础知识。我在下面的代码片段末尾提供了一个建议的解决方案

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
}