3

文字列内の特定の文字を別の文字に置き換える方法を知っています。

System.out.println(replaceAll("どこにいますか??", "?", ""))

public static String replaceAll(String front, String pattern, String back){

    if (front == null)
        return "";

    StringBuffer sb = new StringBuffer(); //A StringBuffer is created
    int idx = -1;
    int patIdx = 0;

    while ((idx = front.indexOf(pattern, patIdx)) != -1)
    {
        sb.append(front.substring(patIdx, idx));
        sb.append(back);
        patIdx = idx + pattern.length();
    }

    sb.append(front.substring(patIdx));
    return sb.toString();
}      

?このコードは、すべてを空のスペースに置き換えて出力します ("Where are you")。

ここで知りたいのは、複数の文字を置き換える方法です。Java では単純な正規表現を使用できますが、blackberry では次のように記述します。

System.out.println(replaceAll("Henry!! Where are you??", "!?", ""))

その後、ブラックベリーはそれを拾いません。では、ブラックベリーが持つこの制限をどのように克服すればよいでしょうか?

4

2 に答える 2

4

あなたが望むようにする方法はありません。しかし、私はあなたにarray of string of the pattern which you want to replace. 文字列の配列をループして、その位置で文字列を取得し、それを

public static String replaceAll(String front, String pattern, String back). これがお役に立てば幸いです。

于 2012-07-19T11:41:30.267 に答える
2

使用できるfront文字列で使用されている文字列内の任意の文字を置換する場合 は、パターン内のすべての文字を反復処理し、最初に置換する文字(最も近い文字)を確認して置換します。私が言いたいのはこのようなものですpatterntoCharArray()

public static String replaceAll(String front, String pattern, String back) {

    if (front == null)
        return "";

    StringBuffer sb = new StringBuffer(); // A StringBuffer is created
    int idx = -1;
    int patIdx = 0;


    boolean end = true;
    int tmp = -1;

    do {
        end = true;
        for (char c : pattern.toCharArray()) {
            //System.out.println("searching for->"+c+" from patIdx="+patIdx+" idx="+idx);
            if ((tmp = front.indexOf(c, patIdx)) != -1) {
                //System.out.println("FOUND->"+c+" from patIdx="+patIdx+" idx="+idx+" tmp="+tmp);
                if (idx == -1 || idx == patIdx-1 || (idx > patIdx && tmp < idx)){
                    end = false;
                    idx = tmp;
                    //System.out.println("setting replacement to ->"+c+" patIdx="+patIdx+" idx="+idx);
                }
            }
        }
        if (!end && idx != -1) {
            //System.out.println("replacing patIdx="+patIdx+" idx="+idx);
            sb.append(front.substring(patIdx, idx));
            sb.append(back);
            patIdx = idx+1;
        }
        //System.out.println("----");
    }while(!end);

    sb.append(front.substring(patIdx));
    return sb.toString();
}
于 2012-07-19T12:26:55.260 に答える