有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中拆分字符串而不丢失任何单词?

我正在使用eclipse for Java

我想在不丢失任何字符的情况下拆分输入行

例如,输入行是:

MAC 4 USD7MAIR 2014 USD1111IMAC 123 USD232MPRO 2-0-1-5

输出应为:

MAC 4 USD7,MAIR 2014 USD1111,IMAC 123 USD232,MPRO 2-0-1-5

(如果我使用"M"等进行拆分,字符M本身将被删除。)

我该怎么办


共 (1) 个答案

  1. # 1 楼答案

    你需要积极地向前看

    string.split("(?=M)");
    

    string.split("(?<!^)(?=M)");
    

    示例:

    String totalString = "MAC 4 USD7MAIR 2014 USD1111IMAC 123 USD232MPRO 2-0-1-5";
    String[] parts = totalString.split("(?=M)");
    System.out.println(Arrays.toString(parts));
    

    输出:

    [MAC 4 USD7, MAIR 2014 USD1111I, MAC 123 USD232, MPRO 2-0-1-5]
    

    更新:

    下面的正则表达式将根据在toUSD\d+之后立即存在的边界分割输入,\d+这里表示一个或多个数字

    String totalString = "MAC 4 USD7MAIR 2014 USD1111IMAC 123 USD232MPRO 2-0-1-5";
    String[] parts = totalString.split("(?<=\\bUSD\\d{1,99}+)");
    System.out.println(Arrays.toString(parts));
    

    输出:

    [MAC 4 USD7, MAIR 2014 USD1111, IMAC 123 USD232, MPRO 2-0-1-5]
    

    (?<=...)称为正向查找后断言。在支持可变长度查找(C#)的语言中,可以使用(?<=\\bUSD\\d+)。但不幸的是,java不支持可变长度查找。因此,我们定义了像allow \d{1,99}数字这样的数字,从1到99表示看管USD+数字到99。和+后面的}称为所有格量词,它不会让正则表达式引擎回溯,从而匹配可能的最大值