题解

此题的解决方法,可以使用如下两种方法。

​ 1.使用String.toCharArray 对数组进行每个字符解析操作。

​ 2.使用正则进行处理。(本文解决的方案)

注意事项,此题需要注意 "xxx yyy zzz" 这样的字符串,它属于一个参数。

方式二的解题思路

​ 1.将 “xxxxx” 使用 正则去匹配 " \".*?\" ",将匹配上的内容用占位符 #### 来替换。(注意此处的 .*?为非贪婪正则)。

​ 2.使用空格拆分得到含有xxxx的字符串数组。

​ 3.将字符串数组中的xxxx使用匹配上的内容去替换。

代码

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            // 1.输入内容
            String content = sc.nextLine(); // 注意:此处是输入的行
            String regex = "\".*?\""; // 此处使用非贪婪的做法 .*? , 即找到下一个引号' " ',此处匹配 "xxxx"
            String replaceStr = "####"; // 定义占位 字符串中的 "xxxx"

            // 2.将 "xxxx" 替换为 #### 然后按 空格 拆分数组
            String[] strs = content.replaceAll(regex, replaceStr).split("\\s"); // 此处使用 占位字符串 “####” 替换 "xxxx",并按空格拆分数组
            Matcher m = Pattern.compile(regex).matcher(content);
            
            // 3.注意此处是关键:找出字符串中的第 x 个“xxxx”替换数组strs中的第 x 个 ####
            while(m.find()) {
                String temp = m.group().replaceAll("\"", ""); // 去掉 “xxxx”中的 双引号
                for(int i=0; i<strs.length; i++) {
                    if(replaceStr.equals(strs[i])) {
                        strs[i] = temp;
                        break;
                    }
                }
            }
            
            // 4.输出结果
            System.out.println(strs.length);
            for(String str : strs) {
                System.out.println(str);
            }
        }
    }
}