参数解析

1.题目描述

在命令行输入如下命令:

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.输入由用例保证,不会出现不符合要求的输入

输入

xcopy /s c:\ d:\
输出

4
xcopy
/s
c:\
d:\

2.思路分析

考虑输入,是一行字符串,包括各个参数,空格,双引号。
其中,如果空格不在双引号中,就输出换行,双引号中的内容全部输出。
可以看到,输出的第一行是参数的个数, 也是不在双引号中的空格数+1。
所以,对于输出的第一行,就可以处理为统计不在双引号内的空格数,最后+1即可。

对于双引号和双引号之内的内容,内容需要全部打印,双引号不需要打印。

对于双引号之外的情况,是参数的就输出,是空格的就换行

3.代码

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        int count = 0;
        //下面整个for循环都是处理参数个数
        for(int i = 0; i < str.length(); 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;//这是当前是否在双引号中的标志位,进入引号,置0,出引号,置1
            }
            if(str.charAt(i) != ' ' && str.charAt(i) != '"'){//除过双引号和空格剩下的都输出(双引号之外)
                System.out.print(str.charAt(i));
            }
            if(str.charAt(i) == ' ' && flag != 0){//遇到空格就换行(双引号之外)
                System.out.println();
            }
            if(str.charAt(i) == ' ' && flag == 0){//双引号之内的空格需要输出
                System.out.print(str.charAt(i));
            }
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值