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()

すなわち

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

myString = myString.replace("x", "9"); // works
于 2013-09-16T11:59:35.780 に答える
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 に答える
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 に答える
0

構文は、char を Integer ではなく char(replace(oldChar, newChar)) に置き換えることです

次のコードを試してみてください

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

代わりは

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

私はこの方法が役立つかもしれないと思う

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