精华内容
下载资源
问答
  • java按空格分割字符串
    千次阅读
    2017-06-24 17:15:00

    Java中使用类似于 str.split("/"); 的方法可以很方便的实现将一个字符串分割为数组,

    但是如果分隔符是一个(或几个)空格呢??

    我们的本能反应或许应该是 str.split(" "); //引号中间是空格

    如果你尝试过以上方法,应该发现是不可以的!!不然你也不会看到这篇博客了,哈哈。

    正确是方法如下:

    str = "Hello  I'm your        String";//空格可以任意多个
    String[] splited = str.split("\\s+");//这样写就可以了

    至于原因呢?没去详细了解,有兴趣的朋友可以研究一下,可以留言告诉我。

    下面这个是源出处:

    https://stackoverflow.com/questions/7899525/how-to-split-a-string-by-space

    转载于:https://www.cnblogs.com/sungong1987/p/7073862.html

    更多相关内容
  • 字符2.1 锚点2.2 点运算符 `.`2.3 字符集2.4 重复次数2.5 `{}` 号2.6 `(...)` 特征标群2.7 `|` 或运算符2.8 转码特殊字符3. 简写字符集4. 零宽度断言(前后预查)4.1 `?=...` 正先行断言4.2 `?!...` 负先行断言...

    一、正则表达式

    1. 正则表达式简介

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

    一个正则表达式是一种从左到右匹配主体字符串的模式。 “Regular expression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。 正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。

    想象你正在写一个应用,然后你想设定一个用户命名的规则,让用户名包含字符、数字、下划线和连字符,以及限制字符的个数,好让名字看起来没那么丑。 我们使用以下正则表达式来验证一个用户名:

    在这里插入图片描述

    以上的正则表达式可以接受 john_doejo-hn_doejohn12_as。 但不匹配Jo,因为它包含了大写的字母而且太短了。

    如果想要练习:regex101: build, test, and debug regex


    2. 元字符

    正则表达式主要依赖于元字符。

    • 表示规则的
    元字符描述
    ^表示开始
    $表示结束
    .代表任意单个字符,除了换行和行结束符
    [ ]代表某个范围内的单个字符,比如: [0-9] 单个数字字符
    [^ ]否定的字符种类。匹配除了方括号里的任意字符
    |或运算符,匹配符号前或后的字符
    \转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ |
    • 表示数量的
    元字符描述
    *匹配 >=0 个重复的在*号之前的字符
    +匹配 >=1 个重复的+号前的字符
    ?标记 ? 之前的字符为0个或1个
    {m}匹配 m个 大括号{m}之前的字符或字符集
    {m, }匹配 至少m个 大括号{m, }之前的字符或字符集
    {m, n}匹配 m<= num <= n 个大括号之前的字符或字符集
    (xyz)字符集,匹配与 xyz 完全相等的字符串

    2.1 锚点

    在正则表达式中,想要匹配指定开头或结尾的字符串就要使用到锚点。^ 指定开头,$ 指定结尾。

    • ^

    ^ 用来检查匹配的字符串是否在所匹配字符串的开头。

    例如,^(T|t)he 匹配以 Thethe 开头的字符串。

    The car is parked in the garage.
    
    "(T|t)he" => The the
    "^(T|t)he" => The
    
    • $

    同理于 ^ 号,$ 号用来匹配字符是否是最后一个。

    例如,(at\.)$ 匹配以 at. 结尾的字符串。

    The fat cat. sat. on the mat.
    
    "(at\.)" => cat. sat. mat.
    "(at\.)$" => mat.
    

    2.2 点运算符 .

    .匹配任意单个字符,但不匹配换行符。

    例如,表达式.ar匹配一个任意字符后面跟着是ar的字符串。

    The car parked in the garage.
    
    ".ar" => car par gar
    

    2.3 字符集

    • 字符集[]

    字符集[] 也叫做字符类。方括号[] 用来指定一个字符集。 在方括号中使用连字符来指定字符集的范围。 在方括号中的字符集不关心顺序。需要注意,方括号的句号就表示句号。 表达式 ar[.] 匹配 ar.字符串。

    例如,表达式[Tt]he 匹配 theThe

    The car parked in the garage.
    
    "[Tt]he" => The the
    
    • 否定字符集[^]

    一般来说 ^ 表示一个字符串的开头,但它用在一个方括号的开头的时候,它表示这个字符集是否定的。

    例如,表达式[^c]ar 匹配一个后面跟着ar的除了c的任意字符。

    The car parked in the garage.
    
    "[^c]ar" => par gar
    

    2.4 重复次数

    后面跟着元字符 +* or ? 的,用来指定匹配子模式的次数。 这些元字符在不同的情况下有着不同的意思。

    • *

    *号匹配 在*之前的字符出现 **>= 0 ** 次。

    例如,表达式 a* 匹配0或更多个以a开头的字符。表达式[a-z]* 匹配一个行中所有以小写字母开头的字符串。

    *字符和.字符搭配可以匹配所有的字符.*

    例如, *和表示匹配空格的符号\s连起来用,如表达式\s*cat\s*匹配0或更多个空格开头和0或更多个空格结尾的cat字符串。

    • +

    +号匹配+号之前的字符出现 >=1 次。

    例如表达式c.+t 匹配以首字母c开头以t结尾,中间跟着至少一个字符的字符串。

    • ?

    在正则表达式中元字符 ? 标记在符号前面的字符为可选,即出现 0 或 1 次

    例如,表达式 [T]?he 匹配字符串 heThe

    2.5 {}

    在正则表达式中 {} 是一个量词,常用来限定一个或一组字符可以重复出现的次数。

    例如, 表达式 [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的数字。

    2.6 (...) 特征标群

    特征标群是一组写在 (...) 中的子模式。(...) 中包含的内容将会被看成一个整体,和数学中小括号( )的作用相同。例如, 表达式 (ab)* 匹配连续出现 0 或更多个 ab。如果没有使用 (...) ,那么表达式 ab* 将匹配连续出现 0 或更多个 b 。再比如之前说的 {} 是用来表示前面一个字符出现指定次数。但如果在 {} 前加上特征标群 (...) 则表示整个标群内的字符重复 N 次。

    还可以在 () 中用或字符 | 表示或。例如,(c|g|p)ar 匹配 cargarpar.

    2.7 | 或运算符

    或运算符就表示或,用作判断条件。

    例如 (T|t)he|car 匹配 (T|t)hecar

    2.8 转码特殊字符

    反斜线 \ 在表达式中用于转码紧跟其后的字符。用于指定 { } [ ] / \ + * . $ ^ | ? 这些特殊字符。如果想要匹配这些特殊字符则要在其前面加上反斜线 \

    例如 . 是用来匹配除换行符外的所有字符的。如果想要匹配句子中的 . 则要写成 \. 以下这个例子 \.?是选择性匹配.

    3. 简写字符集

    正则表达式提供一些常用的字符集简写。如下:

    简写描述
    .除换行符外的所有字符
    \w匹配所有字母数字,等同于 [a-zA-Z0-9_]
    \W匹配所有非字母数字,即符号,等同于: [^\w]
    \d匹配数字: [0-9]
    \D匹配非数字: [^\d]
    \s匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]
    \S匹配所有非空格字符: [^\s]
    \f匹配一个换页符
    \n匹配一个换行符
    \r匹配一个回车符
    \t匹配一个制表符
    \v匹配一个垂直制表符
    \p匹配 CR/LF(等同于 \r\n),用来匹配 DOS 行终止符

    4. 零宽度断言(前后预查)

    先行断言和后发断言都属于非捕获簇(不捕获文本 ,也不针对组合计进行计数)。先行断言用于判断所匹配的格式是否在另一个确定的格式之前,匹配结果不包含该确定格式(仅作为约束)。

    例如,我们想要获得所有跟在 $ 符号后的数字,我们可以使用正后发断言 (?<=\$)[0-9\.]*。 这个表达式匹配 $ 开头,之后跟着 0,1,2,3,4,5,6,7,8,9,. 这些字符可以出现大于等于 0 次。

    零宽度断言如下:

    符号描述
    ?=正先行断言-存在
    ?!负先行断言-排除
    ?<=正后发断言-存在
    ?<!负后发断言-排除

    4.1 ?=... 正先行断言

    ?=... 正先行断言,表示第一部分表达式之后必须跟着 ?=...定义的表达式。

    返回结果只包含满足匹配条件的第一部分表达式。 定义一个正先行断言要使用 ()。在括号内部使用一个问号和等号: (?=...)

    正先行断言的内容写在括号中的等号后面。 例如,表达式 (T|t)he(?=\sfat) 匹配 Thethe,在括号中我们又定义了正先行断言 (?=\sfat) ,即 Thethe 后面紧跟着 (空格)fat

    4.2 ?!... 负先行断言

    负先行断言 ?! 用于筛选所有匹配结果,筛选条件为 其后不跟随着断言中定义的格式。 正先行断言 定义和 负先行断言 一样,区别就是 = 替换成 ! 也就是 (?!...)

    表达式 (T|t)he(?!\sfat) 匹配 Thethe,且其后不跟着 (空格)fat

    4.3 ?<= ... 正后发断言

    正后发断言 记作(?<=...) 用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。 例如,表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fatmat,且其前跟着 Thethe

    4.4 ?<!... 负后发断言

    负后发断言 记作 (?<!...) 用于筛选所有匹配结果,筛选条件为 其前不跟随着断言中定义的格式。 例如,表达式 (?<!(T|t)he\s)(cat) 匹配 cat,且其前不跟着 Thethe

    5. 标志

    标志也叫模式修正符,因为它可以用来修改表达式的搜索结果。 这些标志可以任意的组合使用,它也是整个正则表达式的一部分。

    标志描述
    i忽略大小写。
    g全局搜索。
    m多行修饰符:锚点元字符 ^ $ 工作范围在每行的起始。

    5.1 忽略大小写 (Case Insensitive)

    修饰语 i 用于忽略大小写。 例如,表达式 /The/gi 表示在全局搜索 The,在后面的 i 将其条件修改为忽略大小写,则变成搜索 theTheg 表示全局搜索。

    The fat cat sat on the mat.
    
    "/The/gi" =>  The the
    

    5.2 全局搜索 (Global search)

    修饰符 g 常用于执行一个全局搜索匹配,即(不仅仅返回第一个匹配的,而是返回全部)。 例如,表达式 /.(at)/g 表示搜索 任意字符(除了换行)+ at,并返回全部结果。

    The fat cat sat on the mat.
    
    "/.(at)/g" => fat cat sat mat.
    

    5.3 多行修饰符 (Multiline)

    多行修饰符 m 常用于执行一个多行匹配。

    像之前介绍的 (^,$) 用于检查格式是否是在待检测字符串的开头或结尾。但我们如果想要它在每行的开头和结尾生效,我们需要用到多行修饰符 m

    例如,表达式 /at(.)?$/gm 表示小写字符 a 后跟小写字符 t ,末尾可选除换行符外任意字符。根据 m 修饰符,现在表达式匹配每行的结尾。

        The fat // 换行
        cat sat // 换行
        on the mat.
    
    "/.at(.)?$/gm" => fat sat mat.
    

    6. 贪婪匹配与惰性匹配 (Greedy vs lazy matching)

    正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 ? 将贪婪匹配模式转化为惰性匹配模式。

    The fat cat sat on the mat. 
    
    "/(.*at)/" => The fat cat sat on the mat. 
    "/(.*?at)/" => The fat
    


    二、Java 按空格分割字符串

    有几种在 Java 中拆分字符串的方法,例如

    • String 类的 split() 方法
    • StringUtils 类的 split() 方法
    • StringTokenizer
    • Patterncompile() 方法

    String 类的 split() 方法

    Java 提供了一种方法 split() 来根据指定的 char 拆分字符串。它是 String 类方法,在将字符串吐出后返回一个字符串数组。我们可以使用其索引值进一步访问数组中的每个字符串。

    • split() 方法中使用正则表达式以空格分隔字符串。

    请参见下面的示例。

    public class SimpleTesting{
        public static void main(String[] args) { 
            String str = "Hello This is DelfStack";
            str = str.trim(); // 去掉首尾的空格
            String[] newStr = str.split("\\s+");
            for (int i = 0; i < newStr.length; i++) {
                System.out.println(newStr[i]);
            }
        }
    }
    

    输出

    Hello
    This
    is
    DelfStack
    
    • String 类的 split("reg", k) 方法可用于在指定的索引上拆分字符串。

    例如,如果我们只想分割前三个空格,我们可以简单地将此数字作为第二个参数传递给方法。请参见下面的示例。

    public class SimpleTesting{
        public static void main(String[] args) { 
            String str = "Hello This is DelfStack";
            String[] newStr = str.split(" ",3);
            for (int i = 0; i < newStr.length; i++) {
                System.out.println(newStr[i]);
            }        
        }
    }
    

    输出

    Hello
    This
    is DelfStack
    
    • 如果字符串的开头包含空格,它将返回一个数组,该数组包含第一个为空的索引。

    为避免此问题,我们可以使用 String 类的 trim() 方法来修剪字符串中的所有前导和后导空格,然后应用 split() 方法来获取所有结果的数组。


    StringUtils 类的 split() 方法

    除了 Java String 类之外,还有另一个类 StringUtils,它属于 Apache 库。因此,如果你使用的是 Apache 公共库,则可以使用此类及其 split() 方法来按空格分隔字符串。

    split() 方法不使用正则表达式作为参数;它需要一个需要拆分的字符串参数。请参见以下示例。

    import org.apache.commons.lang3.StringUtils;
    public class SimpleTesting{
        public static void main(String[] args) { 
            String str = "Hello This is DelfStack";
            String[] newStr = StringUtils.split(str);
            for (int i = 0; i < newStr.length; i++) {
                System.out.println(newStr[i]);
            }
        }
    }
    

    StringTokenizer

    可以使用 StringTokenizer 类通过空格分割字符串。它将分割后的标记作为字符串返回。

    请参见下面的示例。

    import java.util.StringTokenizer;
    public class SimpleTesting{
        public static void main(String[] args) { 
            String str = "Hello This is DelfStack";
            StringTokenizer tokens = new StringTokenizer(str, " ");
            String[] newStr = new String[tokens.countTokens()];
            int index=0;
            while(tokens.hasMoreTokens()){
                newStr[index] = tokens.nextToken();
                System.out.println(newStr[index]);
                index++;
            }
        }
    }
    

    Patterncompile() 方法

    compile() 方法属于 Pattern 类,然后可以使用 split() 方法获取分割字符串数组。

    我们使用 compile() 方法来指定分割字符。请参见下面的示例。

    import java.util.regex.Pattern;
    public class SimpleTesting{
        public static void main(String[] args) { 
            String str = "Hello This is DelfStack";
            final Pattern space = Pattern.compile(" ");
            String[] newStr = space.split(str);
            for (int i = 0; i < newStr.length; i++) {
                System.out.println(newStr[i]);
            }        
        }
    }
    

    参考:

    learn-regex/README-cn.md at master · ziishaned/learn-regex (github.com)

    在 Java 中按空格分割字符串 | D栈 - Delft Stack

    展开全文
  • JAVA 一个或多个空格分割字符串

    千次阅读 2022-05-27 00:26:35
    知识补充 String的split方法支持正则表达式; 正则表达式s表示匹配任何空白字符,+表示匹配一次或多次...二、使用一个或多个空格分割字符串 正确代码如下: String [] arr = str.split("\s+"); for(String ss : ar

    知识补充

    1. String的split方法支持正则表达式;

    2. 正则表达式s表示匹配任何空白字符,+表示匹配一次或多次。

    有了以上补充知识,下面的内容就很好理解了。

    一、待分割字符串

    待分割字符串为如下:

    String str = "a  b     c  d e f      g"
    

    其中,字符串中的的空白分别为:单个空格,多个空格,tab制表符。

    二、使用一个或多个空格分割字符串

    正确代码如下:

    String [] arr = str.split("\s+");
    for(String ss : arr){
        System.out.println(ss);
    }
    

    作为对比,错误代码如下:

    String [] arr2 = str.split(" ");
    for(String ss : arr2){
        System.out.println(ss);
    }
    

    三、分割结果

    使用正确代码分割结果:

    a
    b
    c
    d
    e
    f
    g
    

    使用错误代码分割结果:

    a
    
    b
    
    
    
    
    c
    
    d
    e
    f
    
    
    
    
    
    g
    
    展开全文
  • 今天小编就为大家分享一篇Java 行读取文件行写入文件并以空格分割字符串的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • JAVA 多个空格分割字符串

    千次阅读 2022-01-27 09:34:17
    基本能够想到的方法:str.split(" ") 实际上这个用法在处理单个空格分割字符串上是有效的: String sentence = "I am a loser"; String[] words = sentence.split("");

    基本能够想到的方法:str.split(" ")
    实际上这个用法在处理单个空格分隔单词的字符串上是有效的:

    String sentence = "I am a loser";
    String[] words = sentence.split(" ");
    System.out.println(Arrays.toString(words)); // [I, am, a, loser]
    

    如果是有多个空格分隔单词的字符串就会出现问题:

    String sentence = "I am   a    loser";
    String[] words = sentence.split(" ");
    System.out.println(Arrays.toString(words)); // [I, am, , , a, , , , loser]
    

    此时要使用正则规避这个问题:

    String sentence = "I am   a    loser";
    String[] words = sentence.split("\\s+");
    System.out.println(Arrays.toString(words)); // [I, am, a, loser]
    

    但这种方法依旧无法消除前导空格:

    String sentence = "    I am   a    loser";
    String[] words = sentence.split("\\s+");
    System.out.println(Arrays.toString(words)); // [, I, am, a, loser]
    

    所以调用split前可以先调用trim消除前导空格:

    String sentence = "    I am   a    loser";
    String[] words = sentence.trim().split("\\s+");
    System.out.println(Arrays.toString(words)); // [I, am, a, loser]
    
    展开全文
  • 两种用空格分隔的java字符串的方式

    千次阅读 2021-04-24 01:59:03
    两种用空格分隔的java字符串的方式两种方式:1. String str = "123 456 789 111";String [] strArray = str.split("s");2.String str = "123 456 789 111";String [] strArray = str.split(" ");3.多个空格,不管有...
  • 下面小编就为大家带来一篇java 中用split分割字符串,最后的空格等不被拆分的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 下面小编就为大家带来一篇java 字符串分割的三种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 您可以尝试此解决方案import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class SplitTest {public static void main(String[] args) {String str="Reference=R1,R2 GroupId=G01 ...
  • 我用来分割任意数量的空格的字符串的代码是String out="SELECT * ...我希望将“out”字符串中的空格包含到array []对象中,同时使用空格分割.我想要的输出是:array[]={"SELECT","[WHITE SPACE]","*","[WHITE SPACE...
  • 分割字符串空格

    千次阅读 2021-04-15 20:41:49
    java易错点】java split分割字符串 空格问题解析String s = "@123.com";String[] data = s.split("@"); // 以@分割字符串,获得@后的值。运行结果如下data[0] : " ";data[1] : 123.com ;此时,你会发现,data数组...
  • java拆分字符串使用string类的spilt方法,针对某个分隔符来分割一个字符串,示例如下: public class StringSplit { public static void main(String[] args) { String sourceStr = "1,2,3,4,5";//一个字符串 String...
  • String keyword = "apple mango "; String keywords [] = keyword... } 输出: jack fruit ice cream apple mango 标签:java,split,parsing,string,word-spacing 来源: https://codeday.me/bug/20190611/1218466.html
  • java空格分割字符串,遍历每个元素 不用 split( " " ) 的方法,写了半天,写出来一个 do while 。。。do while 看着太难看,改成 while。 // 计算空格的索引,遍历字符串 String re1 = "CS. CS. CS is ...
  • 知识补充 String的split方法支持正则表达式; 正则表达式\s表示匹配任何空白字符...二、使用一个或多个空格分割字符串 正确代码如下: String [] arr = str.split("\\s+"); for(String ss : arr){ System.
  • 一种根据空格分割字符串的方法

    千次阅读 2020-09-23 17:10:22
    一种根据空格分割字符串的方法 import java.util.ArrayList; import java.util.List; public class split { public static void main(String[] args) { //空格从一个到七个 String a = "1 2 3 4 5 6 7 8"; ...
  • Java用split实现分割含一个或多个空格字符串发布时间:2020-11-02 16:28:29来源:亿速云阅读:66作者:Leah本篇文章给大家分享的是有关Java用split实现分割含一个或多个空格字符串,小编觉得挺实用的,因此分享...
  • public String[] split(String ...import java.util.Scanner; public class CaseOne { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); // ...
  • cin 不支持空格读取!!! 若想读取控制台输入的带有空格的一行数据,需要用其他函数: 例如: getline(cin,str); **注意!!避坑!**若getline(cin,str);使用在一个cin 语句的下面,则该行getline(cin,str)将默认...
  • 我正在编写一个Xor方法,通过向其字符添加(作为xor操作)随机值来编写一些字符串.结果应该看起来像带有加密字符的十六进制值的字符串.例:“Hello world”=> “0006F 00046 00066 00076 0004D 0007F 00047 0007D ...
  • java分割字符串

    2021-05-14 10:40:56
    java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r) 示例: for(String revaal:s.split(" ")){//用空格分隔 System.out.println(count+"ci"+revaal); } 或者 String sourceStr = "1,2,3,4,5"; ...
  • 1.待分割字符串: //分别间隔一个空格,两个空格,一个tab制表符 String str = "a b c d"; 字符串中的的空白分别为:单个空格,两个空格,tab制表符。 2. 四种分隔符比较 //四种分隔符 String[] arr1 = str.split...
  • String string =“aa # bb ”}; //去掉所有空格 String str = string.replaceAll(" ", "");...//以#分割字符串 String substring = str.substring(0, str.length()); String[] result = substring.split("#");
  • 字符串以特定符号分割成数组、集合 最后连续 ‘ , ’ 在结尾需要加个空格才能分隔出来,暂时也没研究是为啥。 String ss = ",id,字段,名称,1,2,3,4,,,5,6,,, "; //转数组 String[] cos = ss.split(","); //转list ...
  • 字符串或文本一个或多个标点符号隔开,取出单词

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,916
精华内容 19,966
关键字:

java按空格分割字符串