标签:java charAt 双引号 空格 flag 参数 str 解析
文章目录
题目描述
在命令行输入如下命令:
xcopy /s c:\ d:\,
各个参数如下:
参数1:命令字xcopy
参数2:字符串/s
参数3:字符串c:\
参数4: 字符串d:\
请编写一个参数解析程序,实现将命令行各个参数解析出来。
解析规则:
1.参数分隔符为空格
2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” "d:“时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\program,注意输出参数时,需要将”"去掉,引号不存在嵌套情况。
3.参数不定长
4.输入由用例保证,不会出现不符合要求的输入
eg:
输入:
xcopy /s c:\ d:\
输出:
4
xcopy
/s
c:\
d:\
以下是本篇文章正文内容,下面案例可供参考
解题思路
首先我们要输出参数总个数:
分为两个情况:
- 遇到双引号时,双引号里边需要一直遍历直到出现右双引号
- 未遇到双引号时,遇到空格,就
count++
;
统计双引号外的空格个数,参数总个数 = 双引号外的空格个数 + 1
然后再输出参数:
- 定义一个
flag=1
区分在双引号内或外,遇到一个"
就让flag ^= 1;
- 输出字符
注意:不输出 在双引号内的空格 和 双引号 这两项 - 输出双引号内的空格
- 每遇到一个双引号外的空格换行
代码如下
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
int count = 0;
for (int i = 0; i < str.length(); i++) {
//让i遍历遇到“时,一组遍历,直到遇到下一个”
if (str.charAt(i) == '"') {
do {
i++;
} while (str.charAt(i) != '"');
}
if (str.charAt(i) == ' ') {
count++;
}
}
System.out.println(count + 1);
int flag = 1;//表示在“内外的状态
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '"') {
flag ^= 1;//表示在”内
}
if (str.charAt(i) != '"' && str.charAt(i) != ' ') {
System.out.print(str.charAt(i));//输出
}
if (flag == 1 && str.charAt(i) == ' ') {//表示在双引号外的空格
System.out.println();//换行
}
if (flag == 0 && str.charAt(i) == ' ') {//表示在双引号内的空格
System.out.print(str.charAt(i));//换行
}
}
}
}
}
标签:java,charAt,双引号,空格,flag,参数,str,解析 来源: https://blog.csdn.net/m0_53997485/article/details/116544717
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。