0

スキャナーが読み取るファイルがあり、新しいファイルでライターがその一部をコピーし、編集したい行を置き換えます。

からいくつかの要素を追加したい特定の行に問題がありstringarray [Ddd,Eee,...]ます。

私の問題は、要素を転送したい正確な位置をスキャナーとファイルライターに特定させることができないことです。"downstream_rm"/ と / の間の の下にある必要があり、古いテキストを置き換える必要もあります。

例/ターゲット:

古いファイル行:

 ....
    downstream_rm(j,l) ...
                / Aaa.(bbb)
                    Bbb.(ccc)  /
    ....

新しいファイル行:

 ...
    downstream_rm(j,l( ....
         / str1 
             str2
               ... /

私が試したこのコードは、古いテキストも保持しているため、望ましい結果が得られませんでした:

public static void main(String[] args) {

File file = new File();
File filenew = new File();

        try {


                    PrintWriter out = new PrintWriter(new FileWriter(filenew, true));
                    Scanner scanner = new Scanner(file);




                           while (scanner.hasNextLine()) {
                               String line = scanner.nextLine();


        if(line.contains("downstream_rm(j,l)")) {

                                           scanner.nextLine();   // so that the line with "downstream" wont be deleted

                                           String raw = "" ;


                                           for (int index = 0; index < strarray.size(); index++) {

                                                  String s = strarray.get(index);
                                                   raw = raw + "\n" + s;
                                               }

                                        line = "/"+raw+"/" ; } 
             out.write(line);
        out.write("\n");

                         }
                       out.flush();
                       out.close();
                       scanner.close();


            } catch (IOException e)  {
                e.printStackTrace();


            }
          }
    }

これも試しましたが、新しいものは何も出力されませんでした:

        if(line.contains("downstream_rm(j,l)")){

                               scanner.nextLine();

                               String raw = "" ;


                               for (int index = 0; index < strarray.size(); index++) {

                                      String s = strarray.get(index);
                                       raw = raw + "\n" + s;
                                   }

                        String raw2 = raw.replaceAll(",", "");

                               line = line.replaceAll("/.*?/", "/"+raw2+"/");
                               }  
    out.write(line);
out.write("\n");
4

1 に答える 1

2

あなたのコードは、インラインであるため、本来あるべきことをしていません

 line = line.replaceAll("/.*?/", "/"+raw2+"/");

参照「行」の文字列は正規表現と一致しないため、置換されません

ここにあなたの必要性があります

if (line.contains("downstream_rm(j,l)")) {
            String replacement = line;
            while (!replacement.matches(".*?/.*?/.*?")) {
                replacement += scanner.nextLine();
            }
            String raw = "";
            for (int index = 0; index < strarray.size(); index++) {

                String s = strarray.get(index);
                raw = raw + "\n" + s;
            }
            String raw2 = raw.replaceAll(",", "");
            line = replacement.replaceAll("/.*?/", "/" + raw2 + "/");
        }

「raw2」変数が正しい文字列オブジェクトを指していることを確認してください。結果の変数行には、置換された文字列が含まれます

于 2013-09-19T16:30:05.650 に答える