在第N个位置替换一个字符

时间:2017-01-25 19:13:41

标签: java

此代码的主要思想是在特定位置替换char。当我尝试编译此代码时,它什么都没给我,如果我手杖text2(例如:text2 =" lll"它显示我" lll"。如果有可能给我一个提示解决问题的方法。:)

public static void main(String[] args)
{
    String text3 = "Yeaaaaah";
    replaceNth(text3, 1, 'a', 'o');
}

public static String replaceNth(String text, int n, char oldValue, char newValue)
{
    String text2 = "";
    char[] array1 = text.toCharArray();

    for (int i = 0; i < text.length(); i++) {
        if (array1[i] == oldValue) {
            if (i == n) {
                array1[i] = newValue;
                text2 = text.substring(0) + array1[i] + text.substring(i + 1);
            } else {
                break;
            }
        } else {
            break;
        }
        System.out.println(text2);
    }

    return text2;
}

3 个答案:

答案 0 :(得分:1)

我昨天做了这个:

/*
Changes a character in a string with a character that you enter and returns the new string.
int i - character position
char c - new character
String msg - string that you are editing
*/

public class StringRemastered {
    public String setCharAt(int i, char c, String msg){
        char[] msgArray = msg.toCharArray();
        msgArray[i] = (char) c;
        msg = String.valueOf(msgArray);
        return msg;
    }
}

如果输入为:

2, 'o', "Yeaaaaah"

返回值为:

Yeoaaaah

答案 1 :(得分:0)

逐步分析程序。从for循环开始。首先,它检查array1 [i]是否等于旧值。对于i == 0,这显然是假的(&#39; Y&#39;!=&#39; a&#39;)。因为它不是真的,所以它继续执行else块,它说:break;这意味着退出循环并继续执行下一个语句(这将是System.out.println)。热潮,字符串没有任何反应,因为它被初始化为&#34;&#34;你得到空的String回来。想想如果array1 [0] == oldChar会发生什么,但是n!= 0(提示:查看内部if)。解决方案:删除elses。

问题是你应该替换每个第n次出现的oldChar,所以你应该计算你在迭代时到目前为止匹配了多少个字符匹配。类似的东西:

for(int i=0; i<text.length; i++) {
    if(textChars[i]==oldChar) matches++;
    if(matches % n == 0) textChars[i] = newChar; //will match n, 2n, 3n,...
}
return String.valueOf(textChars);

答案 2 :(得分:0)

从我的观点来看,不必使用'oldValue'作为函数的参数。请看一下在给定一个字符串内替换单个指定字符的函数的可能性之一:

  1. 创建一个包含给定字符串('word'),
  2. 的所有字符的列表
  3. 为给定的“位置”设置新值,
  4. 创建一个StringBuilder并将所有字符(带有更改的单个字符)连接到字符串'result'。

    public static String replaceCharAtSpecificPosition(String word, int   position, char newValue){
    
       List<Character> chars = word.chars()
               .mapToObj(s -> (char)s)
               .collect(Collectors.toList());
    
       chars.set(position, newValue);
    
       StringBuilder result = new StringBuilder();
    
       for(char eachChar: chars){
           result.append(eachChar);
       }
    
       return result.toString();
    }
    
  5. 在main中使用此解决方案的示例:

        String word = "Yeeaaahh";
    
        String changedWord = replaceCharAtSpecificPosition(word, 2, 'Z');
    
        System.out.println(changedWord);
        //result: YeZaaahh