1

文字列から単語を置き換えたいのですが、同じように機能しますがstring.replace("word", "different word");、回数は限られています。単語がapple文字列で 10 回言及されているとしましょう。?applesoranges

また、できればランダムにしたいので、1位から5位までは飛ばさずにapple飛ばして、例えば変更する1st, 3rd, 4th, 7th, and 8th appleと変化します。

ありがとう!

4

2 に答える 2

2

私はランダムな部分文字列を作成replaceFirstし、それらに対してメソッドを使用します。部分文字列化の場合、 substring(int beginIndex)を使用して、0 から lengthOfOriginalWord-1-lengthOfWordToReplace 間隔のランダムな開始インデックスを指定します。

    try {

        String originalWord = "alabalaportocalaORANGEalabalaportocalaORANGEalabalaportocalaORANGEalabalaportocalaORANGEalabalaORANGEORANGEaaaaaaa";
        String replacedWord = "ORANGE";
        String replacingWord = "APPLE";
        String substringedWord = "";

        // make sure this is smaller or equal with the number of occurrences, otherwise it's endless loop times
        int numberOfReplaces = 3;
        Random ran = new Random();
        int beginIndex;

        while (numberOfReplaces > 0) {
            // random index between 0 and originalWord.length()-1-replacedWord.length()
            beginIndex = ran.nextInt(originalWord.length()-1-replacedWord.length());
            substringedWord = originalWord.substring(beginIndex);
            if (substringedWord.contains(replacedWord)) {
                originalWord = originalWord.substring(0, beginIndex) + substringedWord.replaceFirst(replacedWord, replacingWord);
                numberOfReplaces--;                 
            }
        }
        System.out.println(originalWord);
    } catch (Exception exc) {
        System.err.println("An error occurred: \n" + exc);
    }

5回実行した後の出力は次のとおりです。

alabalaportocalaORANGEalabalaportocalaORANGEalabalaportocalaORANGEalabalaportocalaAPPLEalabalaAPPLEAPPLEaaaaaaa alabalaportocalaAPPLEalabalaportocalaAPPLEalabalaportocalaAPPLEalabalaportocalaORANGEalabalaORANGEORANGEaaaaaaa alabalaportocalaAPPLEalabalaportocalaORANGEalabalaportocalaORANGEalabalaportocalaAPPLEalabalaAPPLEORANGEaaaaaaa alabalaportocalaORANGEalabalaportocalaORANGEalabalaportocalaORANGEalabalaportocalaAPPLEalabalaAPPLEAPPLEaaaaaaa alabalaportocalaAPPLEalabalaportocalaORANGEalabalaportocalaAPPLEalabalaportocalaAPPLEalabalaORANGEORANGEaaaaaaa

于 2013-04-27T01:42:45.083 に答える
1

繰り返し使用String#indexOf(String str, int fromIndex)して、置換する単語の開始インデックスをすべて見つけてから、それらのインデックスのいくつかをランダムに選択し (たとえば、 shuffled を使用するArrayList<Integer>か、alternativelyArrayList<Integer>#remove(Random#nextInt(ArrayList#size))を使用して)、連結された呼び出しを使用して新しい文字列を構築できます。String#substring(int beginIndex, int endIndex)

ArrayList<Integer> indices = new ArrayList<>();
int fromIndex = str.indexOf(searchString);
while(fromIndex != -1) {
    indices.add(fromIndex);
    fromIndex = str.indexOf(searchString, fromIndex + 1);
}
于 2013-04-27T01:40:55.813 に答える