上次看到一个博友列出了他在华为的机试题,其中一道对我来说印象深刻。题目大概的意思是:输入一串字符串。如果该字符串 以*开头或结尾,照常输出,如果*存在字符串中间,则去除* 。
这套机试题乍看一下觉得简单,做起来的时候,如果了解split的用法的话,也会相对简单。
下面我贴出我的代码:
/** 输入一串字符串。如果该字符串 以*开头或结尾,照常输出,如果*存在字符串中间,则去除* 例: input: **24ljl(**dsfds* output:**24ljl(**dsfds
* @param args */ public static void main(String[] args) { System.out.println(getSplitString(getScannerString(),"*")); } public static String getScannerString(){ System.out.println("please input a String:"); Scanner scan=new Scanner(System.in); String string=scan.next(); scan.close(); return string; } public static String getSplitString(String string,String regex){ int leftindex=0; int rightindex=0; String left=""; String right=""; while(string.startsWith("*")){ string=string.substring(1, string.length()); leftindex++; } while(string.endsWith("*")){ string=string.substring(0, string.length()-1); rightindex++; } String connect=""; String[] outp=string.split("\\"+regex); // 出错所在 for(int i=0;i<outp.length;i++){ connect=connect+outp[i]; } for(int i=0;i<leftindex;i++){ left=left+"*"; } for(int i=0;i<rightindex;i++){ right=right+"*"; } return left+connect+right; }上面一串代码是在出错两次的情况下整理出来的,总共花了15分钟左右。
第一次出错的时候,写的代码
String[] outp=string.split(regex); // 出错所在
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*^ at java.util.regex.Pattern.error(Unknown Source) at java.util.regex.Pattern.sequence(Unknown Source) at java.util.regex.Pattern.expr(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.util.regex.Pattern.<init>(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.lang.String.split(Unknown Source) at java.lang.String.split(Unknown Source) at com.main.ArrayTest.getSplitString(ArrayTest.java:37) at com.main.ArrayTest.main(ArrayTest.java:12)如果英语水平过得去的博友,这个意思应该立马了解,就是分割符*这个参数语法出错。
立马意识到该字符属于特殊字符,需要用到转义字符\\。
这个问题解决之后,后面的都是水到渠成。
写这篇,
一则是做个记录,
二则是告诫自己,和华为这些大型公司招收的标准还远,需要努力,