题解 | #参数解析#
参数解析
https://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677
//本大神的杰作 //双引号设置一个标志是否出现过, 存储左右双引号位置, 对双引号的内容进行剪切 //记录左空格位置, 再遇到空格时进行剪切 //循环到末尾没有空格没有双引号也要根据空格位置进行剪切 //但是如果双引号周围有空格, 可能会重复剪切, 所以双引号剪切完了, 左空格位置右移, 如果下一个是空格就不用处理了 /* 描述 在命令行输入如下命令: xcopy /s c:\\ d:\\e, 各个参数如下: 参数1:命令字xcopy 参数2:字符串/s 参数3:字符串c:\\ 参数4: 字符串d:\\e 请编写一个参数解析程序,实现将命令行各个参数解析出来。 解析规则: 1.参数分隔符为空格 2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s "C:\\program files" "d:\"时,参数仍然是4个,第3个参数应该是字符串C:\\program files,而不是C:\\program,注意输出参数时,需要将""去掉,引号不存在嵌套情况。 3.参数不定长 4.输入由用例保证,不会出现不符合要求的输入 数据范围:字符串长度: 1 ≤ s ≤ 1000 1≤s≤1000 进阶:时间复杂度: O ( n ) O(n) ,空间复杂度: O ( n ) O(n) 输入描述: 输入一行字符串,可以有空格 输出描述: 输出参数个数,分解后的参数,每个参数都独占一行 */ import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); ArrayList<String> list = new ArrayList<>(); int slow = 0; int exitYinhao = 0; int lYinhao=0, rYinhao=0, lSpace=0; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if( ch=='"' && exitYinhao == 0) { lYinhao = i; exitYinhao = 1; continue; } else if( ch=='"' && exitYinhao == 1 ) { rYinhao = i; exitYinhao = 0; list.add( str.substring(lYinhao+1,rYinhao) ); lSpace = i+1; } else if( ch == ' ' && exitYinhao == 0) { if(i==lSpace) { lSpace = i+1; continue; } list.add( str.substring(lSpace,i) ); lSpace = i+1; } else if ( i==str.length()-1 ) { list.add( str.substring(lSpace,i+1) ); } } System.out.println(list.size()); for(String s:list) { System.out.println(s); } } }
华为机试题解 文章被收录于专栏
华为机试题解