博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java随笔一:String类中方法split
阅读量:4597 次
发布时间:2019-06-09

本文共 2002 字,大约阅读时间需要 6 分钟。

  上次看到一个博友列出了他在华为的机试题,其中一道对我来说印象深刻。题目大概的意思是:输入一串字符串。如果该字符串 以*开头或结尾,照常输出,如果*存在字符串中间,则去除* 。

  这套机试题乍看一下觉得简单,做起来的时候,如果了解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)

  如果英语水平过得去的博友,这个意思应该立马了解,就是分割符*这个参数语法出错。

  立马意识到该字符属于特殊字符,需要用到转义字符\\。

  这个问题解决之后,后面的都是水到渠成。

  写这篇,

  一则是做个记录,

  二则是告诫自己,和华为这些大型公司招收的标准还远,需要努力,

  

 

转载于:https://www.cnblogs.com/zouhl/p/5343880.html

你可能感兴趣的文章
Linux 环境下搭建 Jenkins(Hudson)平台
查看>>
执行caffe的draw_net.py出现“GraphViz's executable "dot" not found”的解决方法
查看>>
struts1标签(html:text)
查看>>
读取 COM1 端口上接收的所有可用的数据。
查看>>
什么是Robtos.txt 协议?
查看>>
Webwork【08】结合实战简析Controller 配置
查看>>
61条Java面向对象设计的经验原则
查看>>
ServiceStack.Text反序列化lowercase_underscore_names格式的JSON
查看>>
机房合作(二):我怎样做组长(编码本身不重要)
查看>>
数据备份及恢复(mongodump/mongorestore)
查看>>
赋值语句
查看>>
Java类加载器总结
查看>>
Python遇到字符编码出问题的一个相对万能的办法
查看>>
Access MongoDB Data with Entity Framework 6
查看>>
母函数
查看>>
HorizontalScrollView的配置
查看>>
应用层-day01
查看>>
ubuntu开启慢日志
查看>>
批量kill进程
查看>>
geoserver发布mysql表数据
查看>>