2

我目前无法将字符串中所有出现的“x”替换为数字。

我已经尝试过: myString .replace('x',Integer.toString(i)) 和类似“x”的东西,而不是整数到字符串,替换引号中的数字,它不起作用,字符串保持不变。

然后我做了以下功能:

public static void trocaXporDouble(String a, double c){
            int i;
            for(i=0;i<a.length();i++){
                if(a.charAt(i)=='x'){
                    String newStr1 = a.substring(0,i-1);
                    String newStr = a.substring(i+1,a.length());
                    newStr1.concat(Double.toString(c));
                    newStr1.concat(newStr);
                }
            }
}

但即使有了这个功能它仍然无法正常工作,有人可以帮我吗?

提前致谢。

4

5 回答 5

10

与 C 不同,Java 中的字符串是不可变的——您无法更改它们:调用replace()会创建一个带有所做更改的字符串。

相反,您需要将调用的结果分配给replace()变量。

IE

myString.replace("x", "9"); // does nothing to myString

myString = myString.replace("x", "9"); // works
于 2013-09-16T11:59:35.780 回答
1

它有效。你必须做错事replace

String s = "abcxsdx xdf";
String after = s.replace("x","1");
System.out.println(after);   //prints   abc1sd1 1df
于 2013-09-16T12:00:53.647 回答
1

干得好。递归方法,对通配符位置没有限制,您可以选择替换字符("01"例如二进制计数或"0123456789"所有自然字符。)

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        String input = "base 3 : **";    // the input, with wildcard
        String replacable = "*";         // wildcard char
        String replacedBy = "0123";      // all the possibilities for wildcard replacement

        ArrayList<String> output = genCombinations(input, replacable, replacedBy);

        // just print the results
        for(String s : output)
            System.out.println(s);
    }

    private static ArrayList<String> genCombinations(String input,String replacable,  String replacement) {
        StringBuilder sb = new StringBuilder(input);
        ArrayList<String> out = new ArrayList<>(); //may warn with jdk < 1.7

        // find the first wildcard
        int index = input.indexOf(replacable);
        if(index==-1){
            //no wildcard found
            out.add(sb.toString());
            return out;
        }

        for(int i = 0; i<replacement.length(); ++i){
            char c = replacement.charAt(i);
            sb.setCharAt(index, c);
            // gen all combination with the first wildcard already replaced
            out.addAll(genCombinations(sb.toString(),replacable, replacement));
        }

        return out;
    }

}

输出:

base 3 : 00
base 3 : 01
base 3 : 02
base 3 : 03
base 3 : 10
base 3 : 11
base 3 : 12
base 3 : 13
base 3 : 20
base 3 : 21
base 3 : 22
base 3 : 23
base 3 : 30
base 3 : 31
base 3 : 32
base 3 : 33
于 2013-09-16T12:02:35.460 回答
0

我认为这种方式可能会有所帮助

String x="ababc";
        String c=x.replaceAll("a", "x");
        System.out.println(c);
于 2013-09-16T11:59:56.690 回答
0

语法是将 char 替换为 char(replace(oldChar, newChar)) 而不是 Integer

试试下面的代码看看

   myString=myString.replace("x",String.valueOf(i));

反而

  myString.replace('x',Integer.toString(i));
于 2013-09-16T12:14:07.190 回答