这个问题要如何解决?

我想制作一个JAVA程序,将指定文件的指定内容全部删除,但不删除被""括起来的部分(即使有要删除的内容)。但是一直做不到,下面是代码:

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;

public class pre {
    public static String sj;
    public static String sj2;
    public static void main(String[] args) throws IOException{
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入文件路径:");
        String cvjlwj = scan.nextLine();
        System.out.print("请输入删除内容:");
        String nuirong = scan.nextLine();
        File f = new File(cvjlwj);
        String Name = f.getName();
        scan.close();
        Path cvjl = Paths.get(cvjlwj);
        List wj = Files.readAllLines(cvjl, StandardCharsets.UTF_8);
        String[] sj0 = wj.toArray(new String[wj.size()]);
        sj = sj0[(int) Math.floor(Math.random())];
        sj2 = sj.replace(nuirong,"");
        sj = sj2;
        Files.write(Paths.get(Name),sj.getBytes(StandardCharsets.UTF_8));
    }
}

如果用户输入的文件内容如下:

10101010100101100"1010101010"

要求删除“1”。
则按照我的想法,应当输出:

000000000"1010101010"

实际上我只能做到:

000000000"00000"

即把所有的“1”删除了。

看看这个是否满足你的需求

public static void main(String[] args) {
        String str = "10101010100101100\"1010101010\"1111101122223\"1990\"";

        /*
         * 1、先将双引号的内容保存起来(记住之前的位置),同时将其它内容也单独保存起来;
         * 2、替换目标字符,比如:1
         * 3、将双引号中内容放回到原处
         */
        int index = -1;
        int start = 0;
        List<String> temp = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        char[] chs = str.toCharArray();
        for(int i=0; i<chs.length; i++){
            if(chs[i] != '\"'){
                continue;
            }
            if(index == -1){
                index = i;
            } else {
                temp.add(str.substring(index,i + 1));
                sb.append(str, start, index);
                sb.append("#");//留一个占位符,占位符一定文件中不存在的字符
                index = -1;
                start = i + 1;
            }
        }
        if(start < chs.length){
            sb.append(str, start, chs.length);
        }
        str = sb.toString().replace("1","");//替换目标字符

        index = 0;
        while (str.contains("#")){
            str = str.replaceFirst("#",temp.get(index++));//然后替换占位符
        }

        System.out.println(str);
    }

写了个比较复杂点的处理方法,请参考:

/* 替换除去""之外字符串中的内容 */
public static String replaceString(String str, String target, String replacement) {
    List<String> list = new ArrayList<>();
    char[] chars = str.toCharArray();
    int startIndex = 0;
    int endIndex = 0;
    for (int i = 0; i < chars.length; i++) {
        char c = chars[i];
        if (c == '\"') {
            if (endIndex < startIndex) {
                i++;
                list.add(str.substring(startIndex, i));
                endIndex = i;
                  startIndex = i + 1;
            } else  {
                if (i != startIndex) {
                    list.add(str.substring(startIndex, i));
                }
            }
            startIndex = i;
        }
        if (i == chars.length - 1) {
            if (i != startIndex) {
                list.add(str.substring(startIndex, i));
            }
        }
    }
    System.out.println(list);
    for (int i = 0; i < list.size(); i++) {
        String s = list.get(i);
        if (!s.contains("\"")) {
            s = s.replace(target, replacement);
            list.set(i, s);
        }
    }
    System.out.println(list);
    StringBuffer sb = new StringBuffer();
    for (String s : list) {
        sb.append(s);
    }
    String newStr = sb.toString();
    return newStr;
}