1

変更する必要がある文字列の ArrayList があります。それらをリストに追加すると、次のようになります。

tick.add("CAST.ST");
tick.add("ELUX-B.ST");
tick.add("EKTA-B.ST");

次に、名前を変更して「.ST」を削除し、「.XML」を追加する方法があります

private static void addFileNames(List<String> ticks, List<File> fileNames)
    {
        List<String> tick = new ArrayList<String>();
        for(int i=0; i<ticks.size(); i++)
            {
            tick.add(ticks.get(i).replaceAll(".ST", ".xml"));

            }
        for(int i=0; i<tick.size(); i++)
        {
            File f = new File("XML/" + tick.get(i));
            fileNames.add(f);

        }

これは、「C.xml.xml」に変更される「CAST.ST」を除くすべての文字列に対して完全に機能します。私もreplaceFirstを試してみたところ、部分文字列「AST」が「C.xml.ST」に置き換えられました。

ここで私が間違っていることを誰かが見ることができますか?

4

4 に答える 4

2

正規表現のピリオドは任意の文字と一致する.ことを意味するため、、、をエスケープする必要があります。投稿された正規表現の場合、とに一致します。\."CAST.ST""AST"".ST"

変化する:

tick.add(ticks.get(i).replaceAll(".ST", ".xml")); 

に:

tick.add(ticks.get(i).replaceAll("\\.ST", ".xml")); 
于 2012-09-06T08:19:56.080 に答える
0

問題は 。正規表現内の任意の文字を表します。「\.ST」でドットをエスケープします。

于 2012-09-06T08:21:09.543 に答える
0

ファイル拡張子を置き換えるには最後の出現を置き換える必要があるため、使用できます

ticks.get(i).replaceAll("\\.st$", ".xml")
于 2012-09-06T08:45:53.047 に答える
0

replaceAll()は、最初の引数として RegEx 式を受け入れます。

元の値から 1 つの値のみを置き換えたいので、replace(".ST", ".xml")を使用しないのはなぜですか。

この回答に正規表現を使用する必要はありません

于 2012-09-06T08:23:44.580 に答える