Bandysol 2022-08-22 10:21 采纳率: 83.3%
浏览 25
已结题

这个问题要如何解决?

我想制作一个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<String> 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”删除了。

  • 写回答

2条回答 默认 最新

  • 燕少༒江湖 2022-08-22 11:26
    关注

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

    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);
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月31日
  • 已采纳回答 8月23日
  • 创建了问题 8月22日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程