题解
此题的解决方法,可以使用如下两种方法。
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);
}
}
}
}