精华内容
下载资源
问答
  • 咦,Java拆分字符串都这么讲究

    万次阅读 多人点赞 2020-04-30 07:50:16
    提到 Java 拆分字符串,我猜你十有八九会撂下一句狠话,“这有什么难的,直接上 String 类的 split() 方法不就拉到了!”假如你真的这么觉得,那可要注意了,事情远没这么简单。 来来来,搬个小板凳坐下。 假如现在...

    提到 Java 拆分字符串,我猜你十有八九会撂下一句狠话,“这有什么难的,直接上 String 类的 split() 方法不就拉到了!”假如你真的这么觉得,那可要注意了,事情远没这么简单。

    来来来,搬个小板凳坐下。

    假如现在有这样一串字符“沉默王二,一枚有趣的程序员”,需要按照中文的逗号“,”进行拆分,这意味着第一串字符为逗号前面的“沉默王二”,第二串字符为逗号后面的“一枚有趣的程序员”(这不废话)。另外,在拆分之前,要先进行检查,判断一下这串字符是否包含逗号,否则应该抛出异常。

    public class Test {
        public static void main(String[] args) {
            String cmower = "沉默王二,一枚有趣的程序员";
            if (cmower.contains(",")) {
                String [] parts = cmower.split(",");
                System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);
            } else {
                throw new IllegalArgumentException("当前字符串没有包含逗号");
            }
        }
    }
    

    这段代码看起来挺严谨的,对吧?程序输出的结果完全符合预期:

    第一部分:沉默王二 第二部分:一枚有趣的程序员
    

    这是建立在字符串是确定的情况下,最重要的是分隔符是确定的。否则,麻烦就来了。

    大约有 12 种英文特殊符号,如果直接拿这些特殊符号替换上面代码中的分隔符(中文逗号),这段程序在运行的时候就会出现以下提到的错误。

    • 反斜杠 \(ArrayIndexOutOfBoundsException)
    • 插入符号 ^(同上)
    • 美元符号 $(同上)
    • 逗点 .(同上)
    • 竖线 |(正常,没有出错)
    • 问号 ?(PatternSyntaxException)
    • 星号 *(同上)
    • 加号 +(同上)
    • 左小括号或者右小括号 ()(同上)
    • 左方括号或者右方括号 [](同上)
    • 左大括号或者右大括号 {}(同上)

    看到这,可能有小伙伴会说,“这不是钻牛角尖嘛”,不不不,做技术就应该秉持严谨的态度,否则,老大会给你的绩效打低分的——奖金拿得少,可不是好滋味。

    那遇到特殊符号该怎么办呢?上正则表达式呗。

    正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。

    那可能又有小伙伴说,“正则表达式那么多,我记不住啊!”别担心,我已经替你想好对策了。

    下面这个链接是 GitHub 上学习正则表达式的一个在线文档,非常详细。遇到正则表达式的时候,掏出这份手册就完事了。记不住那么多正则表达式没关系啊,活学活用呗。

    https://github.com/cdoco/learn-regex-zh

    除了这份文档,还有一份:

    https://github.com/cdoco/common-regex

    作者收集了一些在平时项目开发中经常用到的正则表达式,可以直接拿来用,妙啊。

    解决了心病之后,我们来用英文逗点“.”来替换一下分隔符:

    String cmower = "沉默王二.一枚有趣的程序员";
    if (cmower.contains(".")) {
        String [] parts = cmower.split("\\.");
        System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);
    }
    

    在使用 split() 方法的时候,就需要使用正则表达式 \\. 来替代特殊字符英文逗点“.”了。为什么用两个反斜杠呢?因为它本身就是一个特殊字符,需要先转义。

    也可以使用字符类 [] 来包含英文逗点“.”,它也是一个正则表达式,用来匹配方括号中包含的任意字符。

    cmower.split("[.]");
    

    除此之外, 还可以使用 Pattern 类的 quote() 方法来包裹英文逗点“.”,该方法会返回一个使用 \Q\E 包裹的字符串。

    此时,String.split() 方法的使用示例如下所示:

    String [] parts = cmower.split(Pattern.quote("."));
    

    当通过调试模式进入 String.split() 方法源码的话,会发现以下细节:

    return Pattern.compile(regex).split(this, limit);
    

    String 类的 split() 方法调用了 Pattern 类的 split() 方法。也就意味着,我们拆分字符串有了新的选择,可以不使用 String 类的 split() 方法了。

    public class TestPatternSplit {
        /**
         * 使用预编译功能,提高效率
         */
        private static Pattern twopart = Pattern.compile("\\.");
    
        public static void main(String[] args) {
            String [] parts = twopart.split("沉默王二.一枚有趣的程序员");
            System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);
        }
    }
    

    除此之外,还可以使用 Pattern 配合 Matcher 类进行字符串拆分,这样做的好处是可以对要拆分的字符串进行一些严格的限制,来看一段示例代码:

    public class TestPatternMatch {
        /**
         * 使用预编译功能,提高效率
         */
        private static Pattern twopart = Pattern.compile("(.+)\\.(.+)");
    
        public static void main(String[] args) {
            checkString("沉默王二.一枚有趣的程序员");
            checkString("沉默王二.");
            checkString(".一枚有趣的程序员");
        }
    
        private static void checkString(String str) {
            Matcher m = twopart.matcher(str);
            if (m.matches()) {
                System.out.println("第一部分:" + m.group(1) + " 第二部分:" + m.group(2));
            } else {
                System.out.println("不匹配");
            }
        }
    }
    

    这时候,正则表达式为 (.+)\\.(.+),意味着可以把字符串按照英文逗点拆分成一个字符组,英文小括号 () 的作用就在于此(可以查看我之前提供的正则表达式手册)。

    由于模式是确定的,所以可以把 Pattern 表达式放在 main() 方法外面,通过 static 的预编译功能提高程序的效率。

    来看一下程序的输出结果:

    第一部分:沉默王二 第二部分:一枚有趣的程序员
    不匹配
    不匹配
    

    不过,使用 Matcher 来匹配一些简单的字符串时相对比较沉重一些,使用 String 类的 split() 仍然是首选,因为该方法还有其他一些牛逼的功能。

    比如说,你想把分隔符包裹在拆分后的字符串的第一部分,可以这样做:

    String cmower = "沉默王二,一枚有趣的程序员";
    if (cmower.contains(",")) {
        String [] parts = cmower.split("(?<=,)");
        System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);
    }
    

    程序输出的结果如下所示:

    第一部分:沉默王二, 第二部分:一枚有趣的程序员
    

    可以看到分隔符“,”包裹在了第一部分,如果希望包裹在第二部分,可以这样做:

    String [] parts = cmower.split("(?=,)");
    

    可能有些小伙伴很好奇,?<=?= 是什么东东啊?它其实是正则表达式中的断言模式。

    温馨提醒:如果对断言模式比较生疏的话,可以查看我之前提供的正则表达式手册。

    另外,假如说字符串中包含了多个分隔符,而我们只需要 2 个的话,还可以这样做:

    String cmower = "沉默王二,一枚有趣的程序员,宠爱他";
    if (cmower.contains(",")) {
        String [] parts = cmower.split(",", 2);
        System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);
    }
    

    split() 方法可以传递 2 个参数,第一个为分隔符,第二个为拆分的字符串个数。查看该方法源码的话,你就可以看到以下内容:

    直接 substring() 到原字符串的末尾,也就是说,第二个分隔符处不再拆分。然后就 break 出循环了。来看一下程序输出的结果:

    第一部分:沉默王二 第二部分:一枚有趣的程序员,宠爱他
    

    好了,我亲爱的读者朋友,以上就是本文的全部内容了。是不是突然感觉拆分个字符串真的挺讲究的?

    我是沉默王二,一枚有趣的程序员。如果觉得文章对你有点帮助,请微信搜索「 沉默王二 」第一时间阅读。

    回复【666】更有我为你精心准备的 500G 高清教学视频(已分门别类)。本文 GitHub 已经收录,有大厂面试完整考点,欢迎 Star。

    原创不易,莫要白票,请你为本文点赞个吧,这将是我写作更多优质文章的最强动力。

    展开全文
  • 慕的地10843直接处理字符串的...例如,以下内容将字符串拆分为两部分,并确保两者都只包含数字:import java.util.regex.Pattern;import java.util.regex.Matcher;class SplitExample{ private static Pattern twop...

    1c76e30e5bacc3ef7e7d24a984319ed4.png

    慕的地10843

    直接处理字符串的替代方法是使用带捕获组的正则表达式。这样做的优点是可以直接表示对输入的更复杂的约束。例如,以下内容将字符串拆分为两部分,并确保两者都只包含数字:import java.util.regex.Pattern;import java.util.regex.Matcher;class SplitExample{    private static Pattern twopart = Pattern.compile("(\\d+)-(\\d+)");    public static void checkString(String s)    {        Matcher m = twopart.matcher(s);        if (m.matches()) {            System.out.println(s + " matches; first part is " + m.group(1) +                               ", second part is " + m.group(2) + ".");        } else {            System.out.println(s + " does not match.");        }    }    public static void main(String[] args) {        checkString("123-4567");        checkString("foo-bar");        checkString("123-");        checkString("-4567");        checkString("123-4567-890");    }}由于模式在此实例中是固定的,因此可以预先编译并存储为静态成员(在示例中的类加载时初始化)。正则表达式是:(\d+)-(\d+)括号表示捕获组; 匹配该正则表达式部分的字符串可以通过Match.group()方法访问,如图所示。\ d匹配和单个十进制数字,+表示“匹配前一个表达式中的一个或多个。” - 没有特殊含义,因此只需匹配输入中的该字符。请注意,您需要双重转义反斜杠将其写为Java字符串时。其他一些例子:([A-Z]+)-([A-Z]+)          // Each part consists of only capital letters ([^-]+)-([^-]+)            // Each part consists of characters other than -([A-Z]{2})-(\d+)           // The first part is exactly two capital letters,                           // the second consists of digits

    展开全文
  • 题目:输入一串字符,由(){}[]组成.../*输入字符串,拆解为字符数组* 用函数s.charAt(i)来完成** */import java.util.*;//import java.lang.*;public class Char {public static void main(String[] args){String a=...

    题目:输入一串字符,由(){}[]组成,判断是否所有的括号都是闭括号,是的返回TRUE,不是返回FALSE。

    /*输入字符串,拆解为字符数组

    * 用函数s.charAt(i)来完成

    *

    * */

    import java.util.*;

    //import java.lang.*;

    public class Char {

    public static void main(String[] args){

    String a=new String();

    Scanner in=new Scanner(System.in);

    a=in.next();

    char[]b=new char[100];

    boolean bool=true;

    for(int i=0;i

    b[i]=a.charAt(i);

    }

    for(int i=0;i

    if(b[i]==('{')){//char 是基本类型,这里不能用equals()

    if(b[i+1]=='}')

    continue;

    else{

    bool=false;

    break;

    }

    }

    if(b[i]=='('){

    if(b[i+1]==')')

    continue;

    else{

    bool=false;

    break;

    }

    }

    if(b[i]=='['){

    if(b[i+1]==']'){

    continue;

    }

    else{

    bool=false;

    break;

    }

    }

    bool=true;

    }

    if(bool==true)

    System.out.println("True");

    else

    System.out.println("False");

    }

    }

    展开全文
  • 使用 java 拆分字符串和拼接字符串

    千次阅读 2018-08-31 16:51:33
    1.拆分字符串 String [] tempName ; List&lt;String&gt;mlistName = new ArrayList&lt;&gt;(); mNames = "dasjdask,dasjdsahdsa,dsdsahadsh,dsah,dasasdasd,adssadadsfw”  tempName = ...

    1.拆分字符串

    String [] tempName ;

    List<String>mlistName  = new ArrayList<>();

    mNames = "dasjdask,dasjdsahdsa,dsdsahadsh,dsah,dasasdasd,adssadadsfw”

     tempName = mNames.split(",");
      //把集合转化为数组
     mlistName =Util.toArrayList(tempName);

     

    //数组和集合转换工具类

    public class CollectionUtil {

     /**
         * List集合转换为数组
         */
        @SuppressWarnings("unchecked")
        public static <T> T[] toArray(List<T> items, Class<T> tClass) {
            if (items == null || items.size() == 0)
                return null;
            int size = items.size();
            try {
                T[] array = (T[]) Array.newInstance(tClass, size);
                return items.toArray(array);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    /**
         * 数组集合转换为ArrayList集合
         */
        public static <T> ArrayList<T> toArrayList(T[] items) {
            if (items == null || items.length == 0)
                return null;
            ArrayList<T> list = new ArrayList<>();
            Collections.addAll(list, items);
            return list;
        }
    }

    2.拼接字符串(集合中拼接)

    //使用StringBuffer ,拼接字符串

    list<String>listUser = {"张三",“李四”,“王五”}
     StringBuffer namestr = new StringBuffer();
            int i = 0;
            for (Sting user : listUser) {
                if (i != 0) {
                    namestr.append(",");
                }
                namestr.append(user);
                i++;
            }

     

    展开全文
  • java字符串拆分 空字符Java String split() method is used to split the string into a string array based on the provided regular expression. Java String split()方法用于根据提供的正则表达式将字符串拆分...
  • Java如何拆分字符串

    2021-08-22 16:30:33
    假如现在有这样一串字符序列“沉默王二,一枚有趣的程序员”,需要按照中文逗号“,”进行拆分,这意味着第一串字符序列为逗号前面的“沉默王二”,第二串字符序列为逗号后面的“一枚有趣的程序员”。 直接上 String...
  • I have the String a="abcd1234" and i want to split this into String b="abcd" and Int c=1234This Split code should apply for all king of input like ab123456 and acff432 and so on.How to split this kind...
  • Java编程中,如何拆分正则表达式和字符串?以下示例演示如何使用regex.Pattern类的Pattern.compile()方法和patternname.split()方法拆分正则表达式。package com.yiibai;import java.util.regex.Pattern;public ...
  • import java.util.HashSet; import java.util.Set; class Solution { int max = 0; Set<String> set = new HashSet<>(); public int maxUniqueSplit(String s) { dfs(0, 0, 1, s); return max; ...
  • java截取或拆分字符串

    千次阅读 2018-02-03 23:38:49
    这里我是利用substring,split以及正则表达式去对一个字符串进行截取,或者说是将一个字符串拆分成几个子串。 正则表达式 + substring / split package cn.nuist.jr; import java.util.ArrayList; import java....
  • I tried to search online to solve this question but I didn't found anything.I wrote the following abstract code to explain what I'm asking:String text = "how are you?";String[] textArray= text.splitBy...
  • 您可以使用3个捕获组,并为第二组...)匹配任何字符零次或多次非贪婪>(> = |< = |<> |> | =或< =或<>或>或者<>(.*)匹配任何字符零次或多次例如:String regex = "(.*?)(>=|...
  • 拆分字符串是常见的操作。 本简短的教程将展示一些完成操作的方法。 String.split() 拆分字符串的最常见方法是使用String类中的split()方法。 它根据定界符分割给定的String并返回String的数组 。 让我们...
  • java拆分字符串的split方法对比

    千次阅读 2019-07-22 14:14:46
    最近在做一些字符串方面的拆分清洗和比对,趁着有空将java里多种拆分字符串的方法做一下比对,常用的四种拆分方法,第一种是字符串自带的split();其他三种是org.apache.commons.lang.StringUtils提供的方法,分别是...
  • java中如何拆分一个字符串

    千次阅读 2021-02-28 14:15:56
    “004-034556”为例用String#split()方法即可:String string = "004-034556";String[] parts = string.split("-");... // 034556请注意,这需要一个正则表达式,因此请记住在必要时转义特殊字符。_ 12个具...
  • java拆分8字符串

    2020-03-22 14:29:53
    首先输入数字n,表示要输入多少个字符串。连续输入字符串(输出次数为N,字符串长度小于100)。...按长度为8拆分每个字符串后输出到新的字符串数组,长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 ...
  • 1.实现以下2个接口 不能使用语言的基本分割组合函数(如 ... 1) 字符串拆分成数组,如"ab&&2"通过"&&"做分割符,分割得到字符串数组["ab", "2"] 2) 实现字符串组合,如["ab","2"]通过"&&"分隔符,组成字符串"ab&&2
  • 给你一个字符串 s ,请你拆分字符串,并返回拆分后唯一子字符串的最大数目。 字符串 s 拆分后可以得到若干 非空子字符串 ,这些子字符串连接后应当能够还原为原字符串。但是拆分出来的每个子字符串都必须是唯一的 ...
  • 本篇文章介绍了,使用java处理字符串公式运算的方法。需要的朋友参考下
  • Java 切割字符串的几种方式

    千次阅读 2021-02-27 14:00:10
    按效率排:1、StringTokenizer切割是java.util中的一个类...nextToken可以获取它的下一个字符串,其中delim为分隔符。2、..split("*")分割;最方便,运用最多的,不解释。String[] split = data.split("\n");if (sp...
  • Java按照指定字符拆分字符串

    千次阅读 2020-12-18 11:39:52
    --分割字符串--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.4.0</version> </dependency> ...
  • 由于您的字符串不在数组或列表中,因此您需要明确地分配它们.Matcher m = Pattern.compile(".{1,30}").matcher(s);String s1 = m.find() ? s.substring(m.start(), m.end()) : "";String s2 = m.find() ? s.substring...
  • 主要介绍了Java StringUtils字符串分割转数组的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • java如何分割字符串

    2021-02-12 08:59:11
    importjava.text.Format;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Calendar;importjava.util.Date;importjava.util.List;importjava.u...
  • Java中有很多方法可以分割字符串,但最常用的方法是使用string split()方法。本文主要讨论如何在Java中使用split方法拆成为一个认证的专业分裂字符串是一个非常频繁的操作时执行编码。在Java中有很多方法可以分割...
  • 一件事,我帮助缓和这是创建一个变量,其名称代表正则表达式,并使用Java String格式来帮助。喜欢这个: static public final String WITH_DELIMITER = "((?$s)|(?=%1$s))"; ... public void someMethod() { ... ...
  • Java中分割字符串

    2021-02-12 09:11:45
    java.lang.String的split()方法, JDK 1.4 or laterpublicString[]split(Stringregex,int limit)示例代码public classStringSplit {public static voidmain(String[] args) {String sourceStr= "1,2,3,4,5";...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,850
精华内容 26,340
关键字:

java拆分字符串

java 订阅