精华内容
下载资源
问答
  • 提到 Java 拆分字符串,我猜你十有八九会撂下一句狠话,“这有什么难的,直接上 String 类的 split() 方法不就拉到了!”假如你真的这么觉得,那可要注意了,事情远没这么简单。来来来,搬个小板凳坐下。假如现在有...

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

    d845bca1036a84fd0e6a6a407347c580.gif

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

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

    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 上学习正则表达式的一个在线文档,非常详细。遇到正则表达式的时候,掏出这份手册就完事了。记不住那么多正则表达式没关系啊,活学活用呗。

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

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

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

    String cmower = "沉默王二.一枚有趣的程序员";

    if (cmower.contains(".")) {

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

    System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);

    }

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

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

    cmower.split("[.]");

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

    40a90b43077db1c386d99f052ba46a49.png

    此时,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("(?=,)");

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

    4d9817dcbe4a7830b08e3ef17930c029.png

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

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

    String cmower = "沉默王二,一枚有趣的程序员,宠爱他";

    if (cmower.contains(",")) {

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

    System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);

    }

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

    1992740602b83cdb1c8fa8a23fdb8292.png

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

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

    7cb41964fd5b95c21f860b23bf41d3fa.gif

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

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

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

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

    展开全文
  • java拆分字符串

    千次阅读 2017-01-10 11:03:01
    public class StringSpilt{ public static void main(String args[]){ String str="07,04"; String delim="," ...建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包.
    public class StringSpilt{
    				public static void main(String args[]){
    					String str="07,04";
    					String delim=","
    					StringTokenizer st = new StringTokenizer(str,delim);
    					while (st.hasMoreTokens()) {
    						System.out.println(st.nextToken());
    					}
    				}
    			}

    PS:PS:StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包.

    展开全文
  • Java 拆分字符串

    2012-03-27 20:06:39
    package com.abin.inter.test; public class SplitString1 { public static void main(String[] args) { StringBuffer stb = new StringBuffer();... String unitId1 = "... String callerNumber1 = ...
    package com.abin.inter.test;

    public class SplitString1 {
    public static void main(String[] args) {
    StringBuffer stb = new StringBuffer();
    String unitId1 = "aaaaa";
    String callerNumber1 = "bbbbb";
    String calleeNumber1 = "ccccc";
    stb.append(unitId1).append("|").append(callerNumber1).append("|")
    .append(calleeNumber1);
    System.out.println("stb=" + stb.toString());
    String unitId = stb.toString()
    .substring(0, stb.toString().indexOf("|"));
    System.out.println("unitId=" + unitId);
    String temp1 = stb.toString().substring(unitId.length() + 1,
    stb.toString().length() - unitId.length());
    System.out.println("temp1=" + temp1);
    String callerNumber = temp1.substring(0, temp1.indexOf("|"));
    System.out.println("callerNumber=" + callerNumber);
    System.out.println("unitId.length()=" + unitId.length());
    System.out.println("callerNumber.length()=" + callerNumber.length());
    System.out.println("stb=" + stb.toString().length());
    String temp2 = stb.toString().substring(
    unitId.length() + callerNumber.length() + 2,
    stb.toString().length());
    System.out.println("temp2=" + temp2);
    String calleeNumber = temp2.substring(0, temp2.length());
    System.out.println("calleeNumber=" + calleeNumber);
    }
    }
    展开全文
  • Java编程中,如何拆分正则表达式和字符串?以下示例演示如何使用regex.Pattern类的Pattern.compile()方法和patternname.split()方法拆分正则表达式。package com.yiibai;import java.util.regex.Pattern;public ...

    在Java编程中,如何拆分正则表达式和字符串?

    以下示例演示如何使用regex.Pattern类的Pattern.compile()方法和patternname.split()方法拆分正则表达式。

    package com.yiibai;

    import java.util.regex.Pattern;

    public class SplittingRegularExpression {

    public static void main(String args[]) {

    Pattern p = Pattern.compile(" ");

    String tmp = "this is the Java example";

    String[] tokens = p.split(tmp);

    for (int i = 0; i < tokens.length; i++) {

    System.out.println(tokens[i]);

    }

    }

    }

    上述代码示例将产生以下结果 -

    this

    is

    the

    Java

    example

    示例-2

    以下是如何拆分正则表达式的另一个示例。

    package com.yiibai;

    import java.util.regex.Pattern;

    public class SplittingRegularExpression2 {

    public static void main(String a[]) {

    String s1 = "Learn how to use regular expression in Java programming. Here are most commonly used example";

    Pattern p1 = Pattern.compile("(to|Java|in|are|used)");

    String[] parts = p1.split(s1);

    for (String p : parts) {

    System.out.println(p);

    }

    }

    }

    上述代码示例将产生以下结果 -

    Learn how

    use regular expression

    programm

    g. Here

    most commonly

    example

    ¥ 我要打赏

    纠错/补充

    收藏

    加QQ群啦,易百教程官方技术学习群

    注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

    展开全文
  • 使用 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 = ...
  • java拆分字符串的split方法对比

    千次阅读 2019-07-22 14:14:46
    最近在做一些字符串方面的拆分清洗和比对,趁着有空将java里多种拆分字符串的方法做一下比对,常用的四种拆分方法,第一种是字符串自带的split();其他三种是org.apache.commons.lang.StringUtils提供的方法,分别是...
  • 本篇博客为了方便自己用的时候可以找到。。。。 传送门:Split()拆分字符串与StringTokenizer()拆分字符串
  • O / P: some xml code some xml code some xml code some xml code 休眠映射> - java 我有以下表格:@Entity @Table(name = "events") Event --id --name @Entity @Table(name = "state") State --id --name @...
  • public String[] split...注:split会根据分割符将字符串分割开来,并且分割符不会出现在被分割后的数组中。 但是如果分割分数过小,最后一份会把后面未分割的都包含在内。 String str = new String("a-b-c"); Sy...
  • 原题给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:...
  • 一个小例子:以字符q拆分字符串s String s = "AqBqC"; String []str = s.split("q"); for(int ...
  • java拆分字符串最简单的方法

    千次阅读 2006-09-19 15:56:00
    所谓拆分字符串,就是将一个中间以空格或tab字符分隔的字符串拆分成多个字符串。 如 String s = "abc ddd 中国"; 将这个字符串拆分成三个字符串 字符串类提供了一个split方法通过正则表达式来过滤字符串。 ...
  • private String[] splitSkins(String content,String flag){ StringTokenizer toKenizer = new StringTokenizer(content,flag); ... String[] str = new String[toKenizer.countTokens()];...
  • importjava.io.*;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassest{publicstaticvoidmain(String[]args)throwsIOE...package erjinzhi;import jav...
  • java 字符串拆分字符串数组用split();if(associatedCheckMoreOldStr.length()>0){String[] tmp = associatedCheckMoreOldStr.split("_");associatedCheckMoreOld = new String[tmp.length];for(int i =0;i System...
  • 假设我们有以下字符串。Stringstr="{Javaisaprogramminglanguage}{JamesGoslingdevelopedit.}";上面的字符串用括号括起来。我们可以使用split()方法将带有这些括号的字符串分开。String[]strSplit=str.split("[{}]")...
  • split函数在我学习过的编辑中好像都用这个split函数了,他人作用都一样都是拆分字符串的功能了,下面我们一起来看看java中split拆分字符串函数用法经常需要用java拆分字符串如1,2,3,4 tom,jim,andy,han1.语法如下...
  • 例如,以下内容将字符串拆分为两部分,并确保两者都只包含数字:import java.util.regex.Pattern;import java.util.regex.Matcher;class SplitExample{private static Pattern twopart = Patter...
  • Java工具类--拆分字符串组装数组,替换字符/*** 拆分字符串获取Ids** @param idsString id字符串* @param spiltCode 拆分符号* @return ids* @author lqy*/@Bizlet()public static int[] getIdsAfterSpilt(String ...
  • 也许可以用String.split来做到这一点,但我只是使用这样的子字符串:String s = "12345678abcdefgh";final int mid = s.length() / 2;String[] parts = {s.substring(0, mid),s.substring(mid),};System.out.println...
  • 慕的地10843直接处理字符串的...例如,以下内容将字符串拆分为两部分,并确保两者都只包含数字:import java.util.regex.Pattern;import java.util.regex.Matcher;class SplitExample{ private static Pattern twop...
  • java字符串拆分 空字符Java String split() method is used to split the string into a string array based on the provided regular expression. Java String split()方法用于根据提供的正则表达式将字符串拆分...
  • 利用subString、split+正则表达式拆分字符串 相信大多数人都会用到,将一段字符串,截取在某个或某段字符之后的字符串(有点绕口别梦笔,相信大家能懂,至少还是有点文化水平的)等等(当然条件很多可能是截取前面...
  • 题目:输入一串字符,由(){}[]组成.../*输入字符串,拆解为字符数组* 用函数s.charAt(i)来完成** */import java.util.*;//import java.lang.*;public class Char {public static void main(String[] args){String a=...
  • 提到 Java 拆分字符串,我猜你十有八九会撂下一句狠话,“这有什么难的,直接上 String 类的 split() 方法不就拉到了!”假如你真的这么觉得,那可要注意了,事情远没这么简单。来来来,搬个小板凳坐下。假如现在有...
  • java 字符串拆分字符串数组

    千次阅读 2011-10-05 16:15:47
    java 字符串拆分字符串数组 用split(); if(associatedCheckMoreOldStr.length()>0){  String[] tmp = associatedCheckMoreOldStr.split("_");

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,448
精华内容 579
关键字:

java拆分字符串

java 订阅