每日一题-参数解析

参数解析_牛客题霸_牛客网

解题思路一:首先我们要输出参数个数,由于字符串当中的空格总是比参数个数少1(除双引号当中的空格),因此可以转化为计空格个数,定义count用来计空格数。

注意题目中要求双引号中的字符串不考虑空格数,在遇到第一个双引号时,需要一直遍历字符,直到遇到第二个双引号。遍历双引号以外的空格就要count++。

然后我们需要输出以空格分隔的各个字符串,这时我们会想如何输出双引号当中的字符串呢?我们可以定义一个状态flag,初始状态为1,当遇到第一个双引号时,flag^1,变为0,在flag为0时,说明我们在遍历双引号当中的字符串。

当字符不为空格且不为双引号时,输出字符。双引号的空格需要输出,双引号以外的空格需要换行

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        int count = 0;//用来记空格数
        for(int i = 0;i < s.length();i++){
            //遇到双引号时,要一直遍历,直到遇到第二个双引号
            if(s.charAt(i) == '"'){
                do{
                    i++;
                }while(s.charAt(i) != '"');
            }
            //碰到双引号以外的空格要count++
            if(s.charAt(i) == ' '){
                count++;
            }
        }
        //空格数比字符串个数少1
        System.out.println(count+1);
        int flag =  1;
        for(int i = 0;i < s.length();i++){
            //当碰到第一个双引号flag变为0,当碰到第二个双引号flag变为1
            //说明在flag==0的时候。我们在遍历双引号的参数
            if(s.charAt(i) == '"'){
                flag ^= 1;
            }
            //除了双引号当中的空格和引号,其它字符都输出
            if(s.charAt(i) != ' ' && s.charAt(i) != '"'){
                System.out.print(s.charAt(i));
            }
            //双引号里的空格需要输出
            if(s.charAt(i) == ' ' && flag == 0){
                System.out.print(s.charAt(i));
            }
            //碰到双引号以外的空格需要换行
            if(s.charAt(i) == ' ' && flag == 1){
                System.out.println();
            }
        }
    }
}

解题思路二:对字符串进行遍历,如果遇到\",则将flag置为true,如果遇到\"以外的空格,那么将它添加到链表中,其余情况,将字符添加到StringBuilder中

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        StringBuilder ret = new StringBuilder();
        ArrayList<String> t = new ArrayList();
        boolean flag = false;
        for(int i = 0;i < str.length();i++){
            char c = str.charAt(i);
            //String.valueOf(c)-返回char参数的字符串char形式
            //将String.valueOf(c)与"进行比较
            //如何相等则为flase,不为"则是true
            if(String.valueOf(c).equals("\"")){
                flag = flag ? false : true;
                continue;
            }
            //如果字符为空格且不是",那么将char类型转换为string类型后的值添加到链表t中
            if(String.valueOf(c).equals(" ") && !flag){
                //toString()返回表示此顺序中的数据的字符串。
                t.add(ret.toString());
                //对ret进行拷贝
                ret = new StringBuilder();
            }else{
                ret.append(c);
            }
        }
        t.add(ret.toString());
        System.out.println(t.size());
        for(String s:t){
            System.out.println(s);
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值